zoukankan      html  css  js  c++  java
  • 不同的继承方式

    • 被忽视的细节
    冒号(:)表示继承关系,Parent表示被继承的类,public的意义是什么?
    class Parent
    {
     
    };
    class Child :public Parent
    {
     
    };
    • 有趣的问题:是否可以将继承中的public换成protected或者private?如果可以,与public继承有什么区别?
    • 答:可以!!
    • C++中支持三种不同的继承方式
    public继承:   父类成员在子类中保持原有访问级别
    private继承:  父类成员在子类中变为私有成员
    protected继承 :父类中的公有成员变为保护成员,其它保持不变 
    继承方式/父类成员访问级别
    public protected private
    public public protected private
    protected protected protected private
    private private private private

    • C++中的默认继承方式为private!
    • 事实
    1. 一般而言,C++工程项目只使用public继承
    2. C++的派生语言只支持一种继承方式(public继承)
    3. protected和private继承带来的复杂性远大于实用性
    • 实验
     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 class Parent
     5 {
     6 protected:
     7     int m_a;
     8 protected:
     9     int m_b;
    10 public:
    11     int m_c;
    12     void set(int a, int b, int c)
    13     {
    14         m_a = a;
    15         m_b = b;
    16         m_c = c;
    17     }
    18 };
    19 class Child_A : public Parent
    20 {
    21 public:
    22     void print()
    23     {
    24         cout << "m_a" << m_a << endl;
    25         cout << "m_b" << m_b << endl;
    26         cout << "m_c" << m_c << endl;
    27     }
    28 };
    29 class Child_B : protected Parent
    30 {
    31 public:
    32     void print()
    33     {
    34         cout << "m_a" << m_a << endl;
    35         cout << "m_b" << m_b << endl;
    36         cout << "m_c" << m_c << endl;
    37     }
    38 };
    39 class Child_C : private Parent
    40 {
    41 public:
    42     void print()
    43     {
    44         cout << "m_a" << m_a << endl;
    45         cout << "m_b" << m_b << endl;
    46         cout << "m_c" << m_c << endl;
    47     }
    48 };
    49 int main()
    50 {
    51     Child_A a;
    52     Child_B b;
    53     Child_C c;
    54     a.m_c = 100;       
    55     // b.m_c = 100;    // Child_B 保护继承自 Parent, 所以所有的 public 成员全部变成了  protected 成员, 因此外界无法访问
    56     // c.m_c = 100;    // Child_C 私有继承自 Parent, 所以所有的成员全部变成了 private 成员, 因此外界无法访问
    57     a.set(1, 1, 1);
    58     // b.set(2, 2, 2);
    59     // c.set(3, 3, 3);
    60     a.print();
    61     b.print();
    62     c.print();
    63     return 0;
    64 }
    • 运行结果
    m_a1
    m_b1
    m_c1
    m_a-858993460
    m_b-858993460
    m_c-858993460
    m_a-858993460
    m_b-858993460
    m_c-858993460
    • 小结:
    1. C++中支持三种不同的继承方式
    2. 继承属性直接影响父类成员在子类中的访问属性
    3. 一般而言,工程中只使用public的继承方式
    4. C++的派生语言只支持public继承方式
     
     
     
     
     
    主要记录的是学习听课的笔记
  • 相关阅读:
    spring 事务
    Servlet详解之两个init方法的作用
    被request.getLocalAddr()苦闷了很久
    Java获取IP地址:request.getRemoteAddr()警惕
    MongoDB笔记
    hexo+github搭建博客
    Python处理Excel(使用openpyxl库)
    Wireshark使用学习
    查看开启操作系统端口
    记录Centos7服务器搭建过程
  • 原文地址:https://www.cnblogs.com/chengeputongren/p/12242683.html
Copyright © 2011-2022 走看看