在C++中,动态多态性是通过使用虚函数来实现的。虚函数指的是在基类中定义的函数,如果该函数在派生类中被重新定义,则可以通过指向派生类的指针调用该函数时,实现调用派生类中的函数。这种方法能够实现基于对象类型的多态性,也就是不同派生类对象调用相同基类的虚函数时会执行相应派生类的函数。
具体实现过程如下:
- 声明一个基类,并在其中定义虚函数。例如:
class Shape{
public:
virtual double getArea() {
cout << "Parent class area :" <<endl;
return 0;
}
};
- 编写派生类,重写基类中的虚函数。例如:
class Rectangle : public Shape{
public:
double getArea() {
return width * height;
}
};
class Triangle: public Shape{
public:
double getArea() {
return (width * height)/2;
}
};
- 在主函数中创建对象,调用虚函数。例如:
Shape *shape;
Rectangle rec(10,7);
Triangle tri(10,5);
// 存储矩形的地址
shape = &rec;
// 调用矩形的求面积函数 area
shape->getArea();
// 存储三角形的地址
shape = &tri;
// 调用三角形的求面积函数 area
shape->getArea();
上述代码中,先创建了两个派生类对象,然后通过一个指针指向基类,在不同的时候把这个指针指向派生类,从而调用不同的虚函数。这样做就可以实现基于对象类型的多态性。
另一个示例是一个简单的动物类Animal,它拥有一个虚函数makeSound(),在派生类中分别重写这个虚函数以实现不同种类的动物发出不同的声音。例如:
class Animal {
public:
virtual void makeSound() {
cout << "This is an animal." << endl;
}
};
class Cat : public Animal {
public:
void makeSound() {
cout << "Meow~" << endl;
}
};
class Dog : public Animal {
public:
void makeSound() {
cout << "Woof~" << endl;
}
};
在主函数中,创建这些派生类对象,并分别调用它们的makeSound()函数:
int main() {
Animal *animal;
Cat cat;
Dog dog;
animal = &cat;
animal->makeSound();
animal = &dog;
animal->makeSound();
return 0;
}
这个示例展示了如何在不同的派生类中实现不同的行为,并且通过虚函数来实现基于对象类型的多态性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何在C++中实现动态多态性? - Python技术站