引言

耦合性:参考文章

下面就通过耦合性的由弱到强,依赖、关联、聚合、组合、继承(泛化)、实现。(总结:衣冠剧组呈现)

一、依赖Dependency

例:A类是B类的成员函数的参数、返回值(局部变量)
在这里插入图片描述

1
2
3
4
5
6
7
8
9
class A{};
class B{
public:
void FunB(A& a){}
A GetA()
{
return A();
}
};

二、关联Association

例:A类是B类的一个成员属性

(1)弱关联
在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class A{};
class B{
private:
A* pa;
public:
B(A* ptr):pa(ptr)
{}
//B析构函数不能delete pa,弱关联关系
~B(){}
};
int main()
{
A a;
B b(&a);
return 0;
}

(2)强关联
在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A{};
class B{
private:
A& aref;
public:
//强关联,引用必须初始化
//注意:参数不能使用A a 来构造aref
//(当a的声明周期结束后(只有该函数内),函数结束aref就会失效)
B(A& a):aref(a)
{}

~B(){}
};
int main()
{
A a;
B b(a);
return 0;
}

三、聚合Aggregation

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class point{
private:
int _x;
int _y;
public:
point(int x, int y): _x(x), _y(y){}
~point(){}
};
class Circle{
private:
point center; //圆心
int radius; //半径
public:
Circle():center(pointer(0, 0)), radius(0)
{}
};

四、组合Composition

在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
class body{};
class soul{};
class human{
private:
body _bd;
soul _sl;
public:
human(const body& bd, const soul& sl):_bd(bd), _sl(sl)
{}
};

五、继承Generalization

在这里插入图片描述

1
2
class Animal{};
class Bird : public Animal{};

六、实现Realization

实现对应的是面向对象中的”接口”,即动物都要移动,但是每种移动的方式不一样,鸟要实现自己独有的移动的方法。
在C++中,接口通过的纯虚函数来实现,C++的多态就是通过虚函数来实现的。

1
2
3
4
5
6
7
8
9
class Animal{
public:
vitual void move();
};
class Bird: public Animal{
void move(){
//鸟的移动方式,飞
}
};

参考文章:
面向对象的类关系及其C++实现
设计模式中类的关系:依赖、关联、聚合、组合、继承、实现。耦合度依次递增