C++学习8 | 复合、委托、继承

复合(Composition)

下图中,类 queue (队列)包含一个类 deque (双端队列),并借用 deque 已经实现的一些功能来实现 queue 所需要的东西。简而言之,类 queue 中包含一个 deque
在这里插入图片描述

template <class T, class Sequence = deque<T>>
class queue
{
	...
protected:
	Sequecte c;  //底层容器
public:
	//以下完全利用 c 的操作函数完成
	bool empty() const { return c.empty(); }
	void push(const value_type& x) { c.push_back(x); }
	void pop() { c.pop_front(); }
	...
}

复合关系下的构造与析构

在这里插入图片描述
构造由内而外:
Container 的构造函数首先调用 Component 的默认构造函数然后才执行自己的。

析构由外而内:
Container 的析构函数首先执行自己的,然后再调用 Component 的析构函数。


委托(Delegation)(Composition by reference)

下图中,String 是对外暴露的接口,具体实现是在指针指向的 StringRep 中实现的。因此如果某一天 String 的具体实现需要改变,可通过修改 String 中指向具体实现的那个指针的指向即可完成修改,使用 String 的用户无需关心其内部是如何修改的。
在这里插入图片描述

//file String.hpp
class StringRep;
class String 
{
public:
	String();
	...
	~String();
private:
	//point to implement
	//指向为我实现所有功能的那个类
	StringRep* rep;	//通过指针的方式可调用StringRep的函数
}
//file String cpp
#include "String.hpp"
namespace{
	class StringRep
	{
		friend class String;
		StringRep(const char* s);
		~StringRep();
		int count;
		char* rep;
	}
}
Strng::String(){...}

继承(Inheritance)

子类的对象包含父类的成分。 Base 的构造必须是 virtual,否则会出现 undefined behavior
在这里插入图片描述

class Base
{}

class Derived: public Base	//还有private protected方式
{}

构造由内而外
Derived 的构造函数首先调用 Base 的默认构造函数,然后才执行自己的。

析构由外而内
Derived 的析构函数先执行自己的,然后才调用 Base 的析构函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值