C++ 多态和虚函数表
1 多态
#include <set>
#include <iostream>
class Animal {
public:
virtual void Speak() = 0;
};
class Human : public Animal {
void Speak() override {
std::cout << "hello" << std::endl;
}
};
class Dog : public Animal {
void Speak() override {
std::cout << "wangwangwang" << std::endl;
}
};
class Sheep : public Animal {
void Speak() override {
std::cout << "miemiemie" << std::endl;
}
};
int main() {
std::set<Animal*> animals;
animals.insert(new Human);
animals.insert(new Dog);
animals.insert(new Sheep);
for (auto& animal : animals) {
animal->Speak();
}
return 0;
}
2 虚函数表

2.1 没有虚函数的类没有虚函数表

2.2 虚函数表是一个函数指针的数组,对象的虚函数位于这个数组中

2.3 虚函数表中只有虚函数
2.4 如果两个对象是同一个子类,那么虚函数表的指针相同
最后更新于

