继承
- 继承解决了什么问题?
- 继承的应用场景是什么?
- 简单举例
- 继承的关系
- 语法
继承解决了什么问题?
C++代码的 可重用性 通过继承实现。
新类从已有类获得已有的特性。
继承的应用场景是什么?
继承是一种设计的结果。(举例:牛不能继承拖拉机的耕地能力。)
关系 | 关系说明 | 是否可以继承 | 举例 |
---|---|---|---|
is - a | 继承关系(属于) | √ | 猫咪是一种动物,汽车是一种交通工具。 |
has - a | 聚合关系(包含、组合) | × | 汽车由方向盘、轮胎、发动机等组成。 |
简单举例
类型 | 方法 | 方法 |
---|---|---|
学生 | 吃饭 | 学习 |
老师 | 吃饭 | 上课 |
代码演示:
#include <iostream>
using namespace std;class Student
{
public:void study(string course){cout << " i am a student , i am learning " << course << endl;}void eat(string food){cout << " i am eating " << food << endl;}
};class Teachers
{
public:void tech(string course){cout << " i am teacher , i am teaching " << course << endl;}void eat(string food){cout << " i am eating " << food << endl;}
};int main()
{Student s;Teachers t;s.eat("apple");t.eat("banana");
}
运行结果:
思考:
void eat(string food)
{cout << " i am eating " << food << endl;
}
eat
方法在两个类中完全相同。
使用继承之后设计如下:
类型 | 方法 | 方法 |
---|---|---|
人类 | 吃饭 | |
学生 | 学习 | |
老师 | 教课 |
代码演示:
#include <iostream>
using namespace std;class Human //父类 / 基类
{
public:void eat(string food){cout << " i am eating " << food << endl;}
};class Student :public Human //子类 / 派生类
{
public:void study(string course){cout << " i am a student , i am learning " << course << endl;}
};class Teacher :public Human //子类 / 派生类
{
public:void tech(string course){cout << " i am teacher , i am teaching " << course << endl;}
};int main()
{Student s;Teacher t;s.eat("apple");t.eat("banana");
}
运行结果:
继承的关系
子类 --> 继承 --> 自父类。
基类 --> 派生派 --> 生类。
语法
class 派生类名:[继承方式] 基类名
{
派生类成员声明;
};