C++ 中有三种继承方式:公有继承、保护继承、私有继承
- 父类中私有成员,子类都是不可以访问的
- 公有继承,父类访问类型不变
- 保护继承,把除私有以外的变为保护
- 私有继承,全都变成私有
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(); }
|