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的区别

 

 

posted @ 2012-05-27 21:44  hktkhhhh  阅读(148)  评论(0)    收藏  举报