C++多态&&virtual的一个例子分析C/C++ code #include iostreamusing std::coutclass P{public:virtual
C++多态&&virtual的一个例子分析
- C/C++ code
#include <iostream>using std::cout;class P{public:virtual void print(){cout << "P";}};class Q: public P{public:virtual void print(){cout << "Q";}};int main(){P * p = new P;Q * q = static_cast <Q *> (p); q->print(); delete p;cout << endl; q = new Q; p = q; q->print(); p->print(); cout << endl; p = new (q) P; q->print(); p->print(); cout << endl; p->~P(); delete q; return 0;}请问:输出是什么? 解释下其中vitual函数实现动态调用的原理.谢谢
[解决办法]
virtual function,实现多态,每个含有virtual function的类中都隐式包含着一个静态虚指针vfptr指向该类的静态虚表vtable, vtable中的表项指向类中的每个virtual function的入口地址
[解决办法]
[解决办法]
google一下虚函数实现原理吧
[解决办法]
Q * q = static_cast <Q *> (p);//这是一个错误的转型! 使用 dynamic_cast 而不是 static_cast 而且转完之后要判断是否是0,如果dynamic_cast 转换失败会返回0
q->print();
