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

    结果:

  • 相关阅读:
    System.Web.Mvc.HttpHeadAttribute.cs
    System.Web.Mvc.HttpOptionsAttribute.cs
    System.Web.Mvc.HttpDeleteAttribute.cs
    sqlite-dbeaver-heidisql
    java实现圆周率
    java实现圆周率
    java实现圆周率
    java实现圆周率
    java实现圆周率
    java实现最近距离
  • 原文地址:https://www.cnblogs.com/liunnis/p/4463054.html
Copyright © 2011-2022 走看看