组合:即不十分相关的东西,集成在一起。譬如:电脑是一个类,由鼠标、键盘、显示器、主机这4个类组合而成,可插拔。实现中:一般为传参数。
聚合:即类的本身属性,密不可分割。譬如:人是一个类,由手臂、大腿、躯干三个类组成,不可分割,生命周期相同。实现中:一般为成员属性。
c++举例来看:
//组合(传参数)
#include <iostream>
using namespace std;
class Frind{
friend void add(Frind* pFrind); //友元函数
friend class Add; //友元类
public:
int get(){
return money;
};
protected:
int money=10;
};
class Add{
public:
/*Add(Frind* pFrind){
mpFrind = pFrind;
}*/
//protected:
void func(Frind* mpFrind){ //<strong>传入参数</strong>
//mpFrind = pFrind;
mpFrind->money +=10;
cout <<"内部:"<< mpFrind->money << endl;
};
};
void add(Frind* pFrind){
pFrind->money += 100;
}
int main(){
Frind* pFrind = new Frind();
//add(pFrind);
Add* pAdd = new Add();
pAdd->func(pFrind);
cout << pFrind->get() << endl;
system("PAUSE");
}
运行结果如图:
#include <iostream>
using namespace std;
class Frind{
friend void add(Frind* pFrind);
friend class Add;
public:
int get(){
return money;
};
protected:
int money=10;
};
class Add{
public:
Add(Frind* pFrind){ //构造方法
mpFrind = pFrind; //利用外部对象参数,给内部属性赋值
}
//protected:
void func(){
//mpFrind = pFrind;
mpFrind->money +=10;
cout <<"内部:"<< mpFrind->money << endl;
};
private:
Frind* mpFrind; //内部属性
};
void add(Frind* pFrind){
pFrind->money += 100;
}
int main(){
Frind* pFrind = new Frind();
//add(pFrind);
Add* pAdd = new Add(pFrind);
pAdd->func();
cout << pFrind->get() << endl;
system("PAUSE");
}
运行结果如图:
两种方式运行结果一样,具体用哪种方式更优,视情况而定(不在本文讨论范围)。
多补充一个知识点,多态的作用(仔细分析哦,很经典的):
1、统一接口,高度复用
2、向后兼容,灵活扩展