一张图片做单页网站,全国集团网站建设,网络推广方案策划报告,wordpress 3.6中文版虚函数表
当一个类中声明了虚函数时#xff0c;这个函数在编译时会被标记为虚函数#xff0c;并且对应的虚函数表中会为这个类生成一个虚函数表#xff1b;
当基类指针指向派生类对象时#xff0c;如果这个函数被调用#xff0c;实际上调用的是派生类中的函数。这是因为…虚函数表
当一个类中声明了虚函数时这个函数在编译时会被标记为虚函数并且对应的虚函数表中会为这个类生成一个虚函数表
当基类指针指向派生类对象时如果这个函数被调用实际上调用的是派生类中的函数。这是因为在派生类中虚函数表被重写了指针指向了派生类中的对应函数。 cpp#include iostream// 基类 Animal
class Animal {
public:// 虚函数 speak可以被派生类重写virtual void speak() {std::cout Animal speaks std::endl;}
};// 派生类 Dog继承自 Animal
class Dog : public Animal {
public:// 重写基类的虚函数 speakvoid speak() override {std::cout Dog barks std::endl;}
};// 派生类 Cat继承自 Animal
class Cat : public Animal {
public:// 重写基类的虚函数 speakvoid speak() override {std::cout Cat meows std::endl;}
};int main() {// 创建 Animal 类型的指针指向派生类对象Animal* animal;// 创建 Dog 对象并将其地址赋给 animal 指针animal new Dog();// 调用虚函数 speak实际调用的是 Dog 类中的 speak 函数animal-speak(); // 输出: Dog barks// 创建 Cat 对象并将其地址赋给 animal 指针animal new Cat();// 调用虚函数 speak实际调用的是 Cat 类中的 speak 函数animal-speak(); // 输出: Cat meows// 释放内存delete animal;return 0;
}