zoukankan      html  css  js  c++  java
  • 第四十五课、不同的继承方式

    一、c++中的三种不同继承方式

    1、public继承

    (1)、父类成员在子类中保持原有的访问级别

    2、protected继承

    (1)、父类中的公有成员变成保护成员,其它成员保持不变

    3、private继承

    (1)、父类成员在子类中变成私有成员

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class Parent
    {
    protected:
        int m_a;
    protected:
        int m_b;
    public:
        int m_c;
        
        void set(int a, int b, int c)
        {
            m_a = a;
            m_b = b;
            m_c = c;
        }
    };
    
    class Child_A : public Parent
    {
    public:
        void print()
        {
            cout << "m_a" << m_a << endl;
            cout << "m_b" << m_b << endl;
            cout << "m_c" << m_c << endl;
        }
    };
    
    class Child_B : protected Parent
    {
    public:
        void print()
        {
            cout << "m_a" << m_a << endl;
            cout << "m_b" << m_b << endl;
            cout << "m_c" << m_c << endl;//在类中访问就可以
        }
    };
    
    class Child_C : private Parent
    {
    public:
        void print()
        {
            cout << "m_a" << m_a << endl;
            cout << "m_b" << m_b << endl;
            cout << "m_c" << m_c << endl;
        }
    };
    
    int main()
    {   
        Child_A a;
        Child_B b;
        Child_C c;
        
        a.m_c = 100;
        // b.m_c = 100;    // Child_B 保护继承自 Parent, 所以所有的 public 成员全部变成了 protected 成员, 因此外界无法访问
        // c.m_c = 100;    // Child_C 私有继承自 Parent, 所以所有的成员全部变成了 private 成员, 因此外界无法访问
        
        a.set(1, 1, 1);
        // b.set(2, 2, 2);
        // c.set(3, 3, 3);
        
        a.print();//三个都可以访问,说明继承方式不影响子类中新定义的功能
        b.print();
        c.print();
        
        return 0;
    }

    二、遗憾的事实

    1、一般而言,c++工程项目中只使用public继承

    2、c++的派生语言只支持public继承

    3、protected继承和private继承带来的复杂性远大于实用性

    三、小结

    1、c++支持三种不同的继承方式

    2、继承方式直接影响父类成员在子类中的访问属性

    3、一般而言,工程中只使用public的继承方式

    4、c++的派生语言只支持public的继承方式

     

  • 相关阅读:
    Git设置HTTP/HTTPS代理服务器
    队列(Queue)顺序存储C语言实现
    二叉树前序序列和中序序列转为后序序列
    CFileDialog对话框中,如何修改对话框标题
    轻型读写锁 Slim Reader/Writer (SRW) Locks
    PC lint -sem 用法示例
    C# Linq 取得两个列表的交集
    wpf datagrid row的命中测试
    C# Unit Test 备注
    DataGrid 滚动特定的行或者列
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6367339.html
Copyright © 2011-2022 走看看