前言

面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。

当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。在 Qt 里大量的使用了这种特性,当 Qt 里的类不满足自己的要求时,我们可以重写这个类,就是通过继承需要重写的类,来实现自己的类的功能。
一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。定义一个派生类,我们使用一个类派生列表来指定基类。类派生列表以一个或多个基类命名。

class derived-class: access-specifier base-class

与类的访问修饰限定符一样,继承的方式也有几种。其中,访问修饰符 access-specifier 是public、protected 或 private 其中的一个,base-class 是之前定义过的某个类的名称。如果未使用访问修饰符 access-specifier,则默认为 private。

一、继承的方式

1.公有继承(public):当一个类派生继承公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但是可以通过调用基类的公有和保护成员来访问。
2.保护继承(protected): 当一个类派生继承保护基类时,基类的公有和保护成员将成为派生类的保护成员。
3.私有继承(private):当一个类派生继承私有基类时,基类的公有和保护成员将成为派生类的私有成员。

二、继承示例

新建一个目录 06_inherit_example,编辑一个 06_inherit_example.cpp 内容如下

1 #include <iostream>
2 #include <string>
3 using namespace std;
4
5 /*动物类,抽象出下面两种属性,
6 *颜色和体重,是每种动物都具有的属性
7 */
8 class Animal
9 {
10 public:
11 /* 颜色成员变量 */
12 string color;
13 /* 体重成员变量 */
14 int weight;

15 };
16
17 /*让狗类继承这个动物类,并在狗类里写自己的属性。
18 *狗类拥有自己的属性 name,age,run()方法,同时也继承了
19 *动物类的 color 和 weight 的属性
20 */
21 class Dog : public Animal
22 {
23 public:
24 string name;
25 int age;
26 void run();
27 };
28
29 int main()
30 {
31 Dog dog;
32 dog.name = "旺财";
33 dog.age = 2;
34 dog.color = "黑色";
35 dog.weight = 120;
36 cout<<"狗的名字叫:"<<dog.name<<endl;
37 cout<<"狗的年龄是:"<<dog.age<<endl;
38 cout<<"狗的毛发颜色是:"<<dog.color<<endl;
39 cout<<"狗的体重是:"<<dog.weight<<endl;
40 return 0;
41 }

第 21 行,Animal 作为基类,Dog 作为派生类。Dog 继承了 Animal 类。访问修饰符为 public(公有继承)
然后编译运行