栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

复合(Composition)

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

template >
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 的析构函数。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429655.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号