余睿的博客

浮生若梦,别多会少,不如莫遇

0%

c++继承关系和复合关系

类之间的关系

  • 继承关系:“是”关系

    • 基类为AB是基类A的派生类。
    • 逻辑上要求:一个B对象也是一个A对象。

    例如:从学生类派生出一个研究生类,原则上来说,一个研究生类也是一个学生类

  • 复合关系:“有”关系

    • A中有成员变量kk是类B的对象,则AB是复合关系。
    • 逻辑上要求:B对象是A对象的固有属性或组成部分。

继承关系的使用

假设我们需要写一个人事管理系统,假设需要一个Man类和一个Woman类分别来表示男人和女人。

这是我们不能从Man类派生出Woman类或从Woman类派生出一个Man类,因为一个男人不是一个女人,相反一个女人也不是一个男人。

我们需要提取出男人和女人的共同特点,封装为一个Human类,然后由Human类派生出Man类和Woman类。如下图所示:

继承关系

像上图这样,一个男人或是一个女人都属于人,这样就合乎逻辑了。

复合关系的使用

在几何图形的程序中,我们有一个Point点类,当我们想画一个圆时,我们可以通过Point类来表示圆心,只需要再有一个变量来表示半径,就可以画出一个圆。

这是如果直接让Circle类继承Point类,只需要增加一个r作为半径就可表示一个圆。这样看似没有什么问题,但却不满足继承的逻辑上要求,即一个圆不是一个点,此时我么就需要使用复合关系来表示一个圆。如下代码所示:

1
2
3
4
5
6
7
8
9
10
class Point{
private:
double x;//x坐标
double y;//y坐标
};
class Circle{
private:
Point p;//圆心
double r;//半径
};

此时在Circle对象中就直接包含了一个Point对象来表示圆心,这样就比较合理。

欢迎关注我的其它发布渠道