生手 求解释代码 多态
新手 求解释代码 多态C/C++ codeclass A{public:virtual void showA() {coutits A1endl}void show
新手 求解释代码 多态
C/C++ codeclass A{public: virtual void showA() {cout<<"it's A1"<<endl;} void showB() {cout<< "it's B1"<<endl;}};class B:public A{public: void showA() {cout<<"it's A2"<<endl;} void showB() {cout<<"it's B2"<<endl;}};int main(int argc, char* argv[]){ A *a = new A; B *b = (B*) a; b->showA(); b->showB(); return 0;}
求输出和解释
[解决办法]找本C++基础的书籍,关于虚函数实现多态的章节,认真地看一遍。
[解决办法][解决办法]it's A1
it's B2
第一为A1是因为new出来的是A,A的默认构造函数会把vptr初始化为A的vtable B *b = (B*) a;不会改变a地址的任何东西 b.showA();通过vptr找到vtable里对应的虚函数,而vtable实际上为A的vtable,所以输出it's A1
第二是因为传给this指针的是B*,所以它就找到B里面的showB,输出it's B2
推荐看C++对象模型
C++菜鸟,如有不对,欢迎指正