c++继承,多态的理解,(c++代码测试)
本文同步利用代码来说明博主继承,多态学习中常见的一些问题。
父类指针能实例化子类但却不能调用子类独有的方法
代码举例
#include<iostream> using namespace std; class Base { public: void func(){ cout <<"Base::func(int i)"<< endl; } virtual void func2() { cout << "Base::func2(int i)" << endl;} }; class Derived : public Base { public: void func(){ cout <<"Derived::func()"<< endl;} void func2(){ cout <<"Derived::func2()"<< endl;} void func3(){cout<<"Derived::func3()"<<endl;} }; int main() { Base *pb = new Derived(); pb->func(); pb->func2(); pb->func3();//////////////注意 delete pb; return 0; }
现在代码是不能执行成功的。
因为 在main中,定义了一个父类Base *pb,并将父类pb实例化为它的子类Derived,
而在在pb->func3();//////////////注意处,pb调用了子类的方法func3,这是不允许的,因为通过父类的指针实例化的子类,是不能够使用子类自己特有的方法。
可用通过将这个对象强制转换为子类,就可以使用子类所以的方法了。代码如下
((Derived*)pb)->func3();
现在编译可以通过。
使用virtual和不使用virtual的区别

浙公网安备 33010602011771号