7.5 多继承
小结
7.5 多继承
一个类有多个直接某类的继承关系称为多继承。
多继承声明语法
class 类名1:访问控制 类名2,访问控制 类名3,...,访问控制 类名n
{
...//定义派生类自己的成员
}
7.5.1多继承的派生类构造和访问
多个基类的派生类构造函数可以用初始化调用基类构造函数初始化数据成员。
执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序。
一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应该加以识别。
多重继承的派生类负责所有基类中的成员初始化。基类构造函数的调用顺序取决于定义派生类时指明的基类顺序。
1 #include <iostream> 2 3 class myclass1 4 { 5 public: 6 void run(char *str) 7 { 8 system(str); 9 } 10 myclass1() 11 { 12 std::cout << "myclass1 is created" << std::endl; 13 } 14 ~myclass1() 15 { 16 std::cout << "myclass1 is deleted" << std::endl; 17 } 18 }; 19 20 class myclass2 21 { 22 public: 23 int add(int a, int b) 24 { 25 return a + b; 26 } 27 myclass2() 28 { 29 std::cout << "myclass2 is created" << std::endl; 30 } 31 ~myclass2() 32 { 33 std::cout << "myclass2 is deleted" << std::endl; 34 } 35 }; 36 37 class myclass :public myclass1, public myclass2//基类构造函数的调用顺序取决于定义派生类时指明的基类顺序 38 { 39 public: 40 void print(char *str) 41 { 42 std::cout << str << std::endl; 43 } 44 myclass() 45 { 46 std::cout << "myclass is created" << std::endl; 47 } 48 ~myclass() 49 { 50 std::cout << "myclass is deleted" << std::endl; 51 } 52 }; 53 54 void main() 55 { 56 myclass *pmy1 = new myclass; 57 58 delete pmy1; 59 60 system("pause"); 61 }
小结
继承是面向对象程序设计实现软件重用的重要方法。程序员可以在已有基类的基础上定义新的派生类。
单继承的派生类只有一个基类。多继承的派生类有多个基类。
派生类对基类成员的访问由继承方式和成员性质决定。
创建派生类对象时,先调用基类构造函数初始化派生类中的基类成员。调用析构函数的次序和调用构造函数的次序相反。
C++提供虚继承机制,防止类继承关系成员访问的二义性。
多继承提供了软件重用的强大功能,也增加了程序的复杂性。