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
  • 相关阅读:
    委托理解
    WebForm与MVC模式优缺点
    关系型数据库与NOSQL
    抽象类与接口
    Asp.net中的状态保持方案
    数据库[约束]笔记
    xml文件操作
    String、Path、File、Directroy 常用方法总结
    面向对象5个基本设计原则
    面向对象分析与设计
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9508152.html
Copyright © 2011-2022 走看看