c++ 基类,派生类的类型兼容性

#include <iostream>

using namespace std;

class CFather

{

public:

    void display() const { cout<<"CFather::display()"<<endl;}

};

class CSon:public CFather

{

public:

    void display() const { cout<<"CSon::display()"<<endl;}

};

class CGrandSon:public CSon

{

public:

    void display() const { cout<<"CGrandSon::display()"<<endl;}

};

void show(CFather *ptr)

{

    ptr->display();

}

void showson(CSon *ptr)

{

    ptr->display();

}

int main()

{

    CFather father;

    CSon son;

    CGrandSon grandson;

    show(&father);

    show(&son);

    show(&grandson);

    showson(&grandson);



    getchar();

    return 0;



}

输出结果:

c++ 基类,派生类的类型兼容性

 

类型兼容原则:可以将派生类对象的地址赋值给基类

结论:但是通过这个基类类型的指针,却只能访问到从基类继承的成员。

作用效果:基类对象出现的场合作用派生类对象进行替代后,派生类仅仅发挥出基类的作用。

 

下面改一下代码,访问数据成员:
#include <iostream>

using namespace std;

class CFather

{

public:

    CFather():iTest(100){}//构造函数成员初始化

    void display() const { cout<<"CFather::display()"<<iTest<<endl;}//包含iTest

    int iTest;

};

class CSon:public CFather

{

public:

    void display() const { cout<<"CSon::display()"<<iTest<<endl;}////包含iTest

};

class CGrandSon:public CSon

{

public:

    void display() const { cout<<"CGrandSon::display()"<<iTest<<endl;}////包含iTest

};

void show(CFather *ptr)

{

    ptr->display();

}

void showson(CSon *ptr)

{

    ptr->display();

}

int main()

{

    CFather father;

    CSon son;

    CGrandSon grandson;

    show(&father);//

    show(&son);//

    show(&grandson);//

    showson(&grandson);//



    getchar();

    return 0;



}

结果:

c++ 基类,派生类的类型兼容性

你可能感兴趣的:(C++)