1、C++中三种继承方式及派生类中访问控制规则
(1)、C++支持的三种继承方式是public、protected、private。C++允许一个类同时以不同的方式对不同的基类加以继承。
(2)、
| 继承方式 | 基类成员访问控制 | ||
| public | protected | private | |
| public | public | protected | no access |
| protected | protected | protected | no access |
| private | private | private |
no access |
注意:在派生类中,表中所述的访问控制“private”和“no access”存在很大的差别。对来自基类且在派生类中访问控制为“no access”的成员,
在派生类中是不可见的(自然,派生类的外部也不可见);对来自基类且在派生类中访问控制为“private”的子成员,在派生类内部可以访问它
们,但在派生类外部不可以访问它们。
2、派生类对象内存模型分析
(1)、程序运行时派生类对象或存在于函数栈中或存在于系统给程序分配的堆中,它是一段物理内存。
(2)、派生类与基类之间的关系是一种“is-a”的关系,否则在逻辑上必然造成混乱。
()
3、派生类对象的构造过程和析构过程
(1)、在继承方向上,先基类对象,后派生类子对象;在同一层次上,先包含类子对象,再本类子对象;如果在同一层次上存在多个包含类子
对象时,按照声明顺序来构造。
1 #include <iostream> 2 3 using namespace std; 4 5 class EmbededA_Root 6 { 7 public: 8 EmbededA_Root() 9 { 10 cout << "1_a:constructing embedded sub object A.\n"; 11 } 12 ~EmbededA_Root() 13 { 14 cout << "1_a:destructing embedded sub object A.\n"; 15 } 16 private: 17 }; 18 class EmbededB_Root 19 { 20 public: 21 EmbededB_Root() 22 { 23 cout << "1_b:constructing embedded sub object B.\n"; 24 } 25 ~EmbededB_Root() 26 { 27 cout << "1_b:destructing embedded sub object B.\n"; 28 } 29 private: 30 }; 31 class RootBase 32 { 33 public: 34 RootBase():embedA(), embedB() 35 { 36 cout << "1:constructing root base sub object.\n"; 37 } 38 ~RootBase() 39 { 40 cout << "1:destructing root base sub object.\n"; 41 } 42 private: 43 44 EmbededB_Root embedB; 45 EmbededA_Root embedA; 46 }; 47 class Base:RootBase 48 { 49 public: 50 Base() 51 { 52 cout << "2:constructing base sub object.\n"; 53 } 54 ~Base() 55 { 56 cout << "2:destructing base sub object.\n"; 57 } 58 private: 59 }; 60 class Derived:public Base 61 { 62 public: 63 Derived() 64 { 65 cout << "3:constructing derived sub object.\n"; 66 } 67 ~Derived() 68 { 69 cout << "3:destructing derived sub object.\n"; 70 } 71 private: 72 }; 73 74 int main() 75 { 76 { 77 Derived d; 78 } 79 int c; 80 cin >> c; 81 return 0; 82 }