继承方式

  • 继承方式一共有三种
  1. 公共继承
  2. 保护继承
  3. 私有继承

  • 不同的继承方式会影响基类(父类)成员在派生类(子类)中的访问权限

公共(public)继承方式

  • 基类中所有 public 成员在派生类中为 public 属性
  • 基类中所有 protected 成员在派生类中为 protected 属性
  • 基类中所有 private 成员在派生类中不能使用

保护(protected)继承方式

  • 基类中的所有 public 成员在派生类中为 protected 属性
  • 基类中的所有 protected 成员在派生类中为 protected 属性
  • 基类中的所有 private 成员在派生类中不能使用

私有(private)继承方式

  • 基类中的所有 public 成员在派生类中均为 private 属性
  • 基类中的所有 protected 成员在派生类中均为 private 属性
  • 基类中的所有 private 成员在派生类中不能使用

表格

继承方式 public成员 protected成员 private成员
public继承 public protect 无法访问
protected继承 protected protected 无法访问
private继承 private private 无法访问

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include<iostream>
using namespace std;

class Base1 {
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class son1 :public Base1{
public:
void func() {
m_A = 10;
m_B = 10;
//m_C = 10; //报错
}
};

class Base2 {
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class son2 :protected Base2 {
public:
void func() {
m_A = 20;
m_B = 20;
//m_C = 20; //报错
}
};

class Base3 {
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
class son3 :private Base3 {
public:
void func() {
m_A = 30;
m_B = 30;
//m_C = 30; //报错
}
};

class Grandson3 :public son3 {
public:
void func() {
//m_A = 40;//报错
//m_B = 40;//报错
//m_C = 40;//报错
}
};