#include <iostream>
class A {
public:
virtual void print() { std::cout << "class A" << std::endl; }
};
class B : public A {
public:
virtual void print() override { std::cout << "class B" << std::endl; }
};
class C : public A {
public:
virtual void print() override { std::cout << "class C" << std::endl; }
};
int main() {
B obj1;
A *ptr1 = dynamic_cast<A *>(&obj1);
ptr1->print();
B *ptr2 = dynamic_cast<B *>(ptr1);
ptr2->print();
C *ptr3 = dynamic_cast<C *>(ptr2);
ptr3->print();
}
根据我的理解,当我们使用指针调用对象的虚函数时,它会搜索该对象的虚表并为我们调用匹配的函数。
但是当我尝试运行上面的代码时,它只打印两个“B 类”(前两个调用)。
看起来 ptr3 上的第三次打印将终止程序,有人可以告诉我为什么第三次 print() 失败。
要在 C 对象上成功调用 print(),您需要创建并指向 C 对象:
enter code here
C obj2;
C *ptr3 =dynamic_cast