父类和子类的虚函数指针
时间: 2023-12-06 15:36:05 浏览: 94
虚函数的指针访问
在C++中,虚函数是一种特殊的函数,它可以在派生类中被重写。父类指针或引用可以指向派生类对象,从而实现多态。虚函数指针是一个指向虚函数表的指针,虚函数表是一个存储虚函数地址的表格。当一个类包含虚函数时,编译器会为该类生成一个虚函数表,该表中存储了该类的虚函数地址。当一个对象被创建时,它会包含一个指向虚函数表的指针,该指针被初始化为该类的虚函数表的地址。当调用虚函数时,实际上是通过该指针找到虚函数表中对应的虚函数地址,然后调用该函数。
父类和子类都可以有虚函数,子类可以重写父类的虚函数。当父类指针或引用指向子类对象时,调用虚函数时会根据对象的实际类型来调用对应的虚函数。如果子类没有重写父类的虚函数,则会调用父类的虚函数。
以下是一个简单的示例代码,演示了父类和子类的虚函数指针:
```c++
#include <iostream>
using namespace std;
class Animal {
public:
virtual void speak() {
cout << "Animal speaks!" << endl;
}
};
class Cat : public Animal {
public:
void speak() {
cout << "Cat meows!" << endl;
}
};
int main() {
Animal *animal = new Animal();
Cat *cat = new Cat();
animal->speak(); // 输出:Animal speaks!
cat->speak(); // 输出:Cat meows!
Animal *catAnimal = cat;
catAnimal->speak(); // 输出:Cat meows!
delete animal;
delete cat;
return 0;
}
```
阅读全文