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

    结果:

  • 相关阅读:
    编程练习--判断两个数组中数据的数据类型是否相同
    JS 类型检测
    JS学习笔记 等于和包装对象
    HTML5经典案例学习-----新元素添加文档结构
    JZ2440存储管理器--SDRAM
    GPIO实验之c语言
    1- 裸机开发GPIO
    Java基础教程——数组
    Java基础教程——运算符
    结构化编程·图示
  • 原文地址:https://www.cnblogs.com/liunnis/p/4463054.html
Copyright © 2011-2022 走看看