勿在浮沙筑高台--P11面向对象
2021-01-30 本文已影响0人
Catherin_gao
面向对象的编程
- 继承 Inheritance
- 复合 Composition
- 委托 Delegation
一. 复合 Composition 表示has-a
设计模式:Adapter
- queue 包含deque
- queue中所有功能deque都有实现
template<class T, class Sequence = deque<T> >
class queue{
...
protected:
deque<T> c; //底层容器
public:
// 以下完全利用c的操作函数完成
bool empty() const {return c.empty(); }
size_type size() const {return c.size(); }
reference front() {return c.front();}
//deque是两端可进去
reference back() {return c.back();}
//
void push(const value_type& x) { c.push_back(x); }
void pop() { c.pop_front(); }
}
1.1 复合关系下的构造和析构
- 构造由内而外
- 析构由外而内
二. 委托 Delegation. Composition by reference
- 有一个指针指向另一个类, 设计模式:Handle/Body(pImpl)
- class String客户使用,可以把两个类的实现拆分
// file String.hpp
class StringRep;
class String{
public:
String();
String(const char* s);
String(const String& s);
String &operator=(const String& s);
~String();
....
private:
StringRep* rep; //pipml
};
file string.cpp
#include "String.hpp"
namespace{
class StringRep{
friend class String;
StringRep(char* s);
~StringRep();
int count;
char* rep;
};
}
三. 继承 Inheritance,表示is-a
class _List_node_base
{
};
class _List_node
:public _List_node_base
{
__Tp _M_data;
};