• 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;
    
    }

    输出结果:

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

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

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

    下面改一下代码,访问数据成员:
    #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;
    
    }

    结果:

  • 相关阅读:
    TeX中的引号
    竖式问题
    蛇形填数
    开灯问题
    排列
    分数化小数
    子序列的和
    cookie
    post请求
    get请求
  • 原文地址:https://www.cnblogs.com/liunnis/p/4463054.html
Copyright © 2020-2023  润新知