zoukankan      html  css  js  c++  java
  • 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;
    
    }

    结果:

  • 相关阅读:
    HTTP协议中常用相应的状态码总结
    mysql 用户管理
    史上最全的mysql聚合函数总结(与分组一起使用)
    jQuery+masonry实现瀑布流
    MySQL Workbench 导入导出乱码解决方法
    在Google Maps 上点击标签显示说明并保持不消失
    在Google Maps 上点击标签后显示说明
    如何在Google Maps 添加多个标记
    如何在 Google 地图中添加标记和说明
    Google Maps API3 之 Hello World
  • 原文地址:https://www.cnblogs.com/liunnis/p/4463054.html
Copyright © 2011-2022 走看看