C++基础学习(2)

类与类的关系


类是C++区别C的最大特性,有了类我们就能够实现封装,继承,和多态这三大特性,同时类与类之间的关系我们分为三种:复合(composition) ,委托(Delegation),继承(inheritance)

一:Composition

复合指的是类A包含类B,也就是A has B;

代码示例:
class B;
class A{
public :
void f(){
b.f();
}
private:
B b;
}
适用情形:假设需要建立的新类B的功能在类A中全部存在,就可以直接使用复合来创建类B,类A成为了类B的一个成员;例如A为queue,B为deque。
构造函数:由内而外,先构造B,再构造A。
析构函数:由外而内,先析构A,再析构B。


二:Delegation
委托指的是类A中的一个成员指向类B

代码示例:
class B;
class A{
public:
A();
~A();
private:
B* b;
}
典型例子就是:pimpl,(编译防火墙)。类A为对外接口。类B为实现类。好处就是如果改变了实现方向,并不需要去改变对外接口,就是如果B更改了,A并不需要更改。对用户而言接口没变。(handle/body)

构造是由内而外
析构是由外而内

http://blog.csdn.net/lihao21/article/details/47610309


三inheritance
继承是a is b 继承有三种方式:public  private   protected
代码示例
class A{
public :
A(){};
virtual ~A(){};
}
class B : public A
{
}
继承在C++中的使用相当广泛,后面会详细记录。
构造是由内而外
析构是由外而内
通过以上三种类与类的关系组合成不同的解决方案,最著名的有23中OOD方案,下面介绍三种:

一。委托+复合
典型例子就是一个ppt开四个窗口或者一组数据通过不同形式显示出来。对外接口是Subject 用户操作在Subject上,Subject里面有个指向Observe的指针容器。也就是可以调用很多个Observer
,Observer是一个基类,他有很多派生类,都可以放到Subject中的指针容器中,也就能够实现不同的显示形式。
二。Composite
委托加继承
典型的就是文件系统,目录里面可以放文件和文件夹,Primitive代表文件,是指单一的文件,Composite代表文件夹,可以包含很多文件和文件夹。


三.Prototype
在子类中定义一个静态的自己,创建自己的时候会调用私有的构造函数,在构造函数中将自己也就是原型加到原来的框架中也就是通过addPrototype(this)将原型放到prototypes[10]中。框架端有了原型后,框架端就可以通过这个原型调用clone函数制造出副本来(当然子类的其他函数,只要原型被添加到框架中,框架端就可以通过这个原型调用。)

总之对于设计模式而言就是拿这三种类与类的关系进行组合,最常用的组合就是委托和继承。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值