不同的继承方式

  • 被忽视的细节
冒号(:)表示继承关系,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继承方式
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/chengeputongren/p/12242683.html
今日推荐