第45课 不同的继承方式

被忽视的细节:

问题:

示例:

可以看到其他两种继承方式也完全可以编译通过。

这三种不同的继承有什么区别呢?

不同的继承方式:

深度实践:

 1 #include <iostream>
 2 #include <string>
 3 
 4 using namespace std;
 5 
 6 class Parent
 7 {
 8 protected:
 9     int m_a;
10 protected:
11     int m_b;
12 public:
13     int m_c;
14     
15     void set(int a, int b, int c)
16     {
17         m_a = a;
18         m_b = b;
19         m_c = c;
20     }
21 };
22 
23 class Child_A : public Parent
24 {
25 public:
26     void print()
27     {
28         cout << "m_a" << m_a << endl;
29         cout << "m_b" << m_b << endl;
30         cout << "m_c" << m_c << endl;
31     }
32 };
33 
34 class Child_B : protected Parent
35 {
36 public:
37     void print()
38     {
39         cout << "m_a" << m_a << endl;
40         cout << "m_b" << m_b << endl;
41         cout << "m_c" << m_c << endl;
42     }
43 };
44 
45 class Child_C : private Parent
46 {
47 public:
48     void print()
49     {
50         cout << "m_a" << m_a << endl;
51         cout << "m_b" << m_b << endl;
52         cout << "m_c" << m_c << endl;
53     }
54 };
55 
56 int main()
57 {   
58     Child_A a;
59     Child_B b;
60     Child_C c;
61     
62     a.m_c = 100;
63     // b.m_c = 100;    // Child_B 保护继承自 Parent, 所以所有的 public 成员全部变成了 protected 成员, 因此外界无法访问
64     // c.m_c = 100;    // Child_C 私有继承自 Parent, 所以所有的成员全部变成了 private 成员, 因此外界无法访问
65     
66     a.set(1, 1, 1);
67     // b.set(2, 2, 2);
68     // c.set(3, 3, 3);
69     
70     a.print();
71     b.print();
72     c.print();
73     
74     return 0;
75 }

遗憾的事实:

JAVA、C#就只有一种继承方式--公有继承。

 小结:

猜你喜欢

转载自www.cnblogs.com/wanmeishenghuo/p/9574677.html