太一的博客

一个程序学徒

继承方式

C++ 中有三种继承方式:公有继承、保护继承、私有继承

  • 父类中私有成员,子类都是不可以访问的
  • 公有继承,父类访问类型不变
  • 保护继承,把除私有以外的变为保护
  • 私有继承,全都变成私有

image-20240911212436201

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
#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 Son2:protected Base1
{
public:
void func()
{
m_A = 100; // 父类中公共成员,到子类中变为保护权限
m_B = 100; // 父类中保护成员,到子类中变为保护权限
// m_C = 100 // 父类中的私有权限成员 子类访问不到
}
};

class Son3:private Base1
{
public:
void func()
{
m_A = 100; // 父类中公共成员 到子类中变为 私有成员
m_B = 100; // 父类中保护成员 到子类中变为 私有成员
m_C = 100; // 父类中私有成员 子类访问不到
}
};

void test01()
{
Son1 s1;
s1.m_A = 100;
// s1.m_B = 100; // 保护权限在类外访问不到
Son2 s2;
// s2.m_A = 100; // 保护权限在类外访问不到
}

int main() {
test01();
}

父类中的属性会被子类继承吗?

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
#include <iostream>

using namespace std;

class Base
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};

class Son:public Base
{
public:
int m_D;
};

void test01()
{
// 16
// 父类中所有非静态成员属性都会被子类继承下去
// 父类中私有成员属性是被编译器给隐藏了,因此是访问不到的
cout << "size of Son = " << sizeof(Son) << endl;
}

int main() {
test01();
}