zoukankan      html  css  js  c++  java
  • C++——同名隐藏 和 赋值兼容规则

    同名隐藏

    一旦子类定义了与父类同名的方法,则父类里面该名字的所有方法被隐藏了。必须显示指定是父类的方法才可以

    #include<iostream>
    using namespace std;
    
    class Base
    {
    public:
        Base() :x(0)
        {}
        ~Base()
        {}
        void show()
        {
            cout << "This is Base show" << endl;
        }
        void show(int n)
        {
            cout << "This is Base show" << n << endl;
        }
    private:
        int x;
    };
    
    class D :public Base
    {
    public:
        D() :y(0)
        {}
        ~D()
        {}
        void show()
        {
            cout << "This is D show" << endl;
        }
    private:
        int y;
    };
    
    void main()
    {
        D d;
        d.show();
        d.Base::show(10);
    }
    View Code

    赋值兼容规则

    在任何需要基类对象的地方都可以用公有派生类的对象来代替,这条规则称赋值兼容规则。它包括以下情况:

    ①派生类的对象可以赋值给基类的对象,这时是把派生类对象中从对应基类中继承来的隐藏对象赋值给基类对象。反过来不行,因为派生类的新成员无值可赋。

    Base b;
    D d;
    b = d;
    d = b;//不能赋值
    View Code

    对象切片

    ②可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的隐藏对象,不能访问派生类中的新成员。同样也不能反过来做。

    D d;
    Base *pb = &d;
    pb->show();
    pb->show(10);
    pb->list();//访问不了
    View Code

           pb只能访问Base这个父类内部的方法。不能访问子类里面的show和list


    ③派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的隐藏对象。

    D d;
    Base &rb = d;
    rb.show();
    rb.show(10);
    rb.list();//访问不了
    View Code
  • 相关阅读:
    3星|《中国古城墙》:重要的古城墙的资料汇集
    bindingSource具体使用案例
    WPF第三方控件盘点
    FluentValidation具体使用案例
    Visual Studio 版本管理从TFS迁移到SVN
    Image.FromStream与Image.FromFile使用区别
    判断图片的格式的方法
    WCF测试小程序
    使用AutoMapper 处理DTO数据对象的转换
    获取mac地址和IP地址方式
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9508152.html
Copyright © 2011-2022 走看看