GeekBand笔记: C++面向对象高级编程(3)

2016-03-19  本文已影响0人  Royye

OOD(Object Oritented Design)

UML关系图

+ public
- private
# private
_ static

Inheritance with virtual functions

class Shape {
public:
        virtual void draw() const = 0;
        virtual void error(const std::string& msg);
        int objectID() const;
};

Inheritance, Composition的构造和析构顺序

Inheritance,Composition,Delegation 和设计模式

Template Method 模板方法/函数

Adapter 适配器模式

Composition的实现

Observer 观察者模式

Delegation + Inheritance

Composite 组合模式

Delegation + Inheritance

Prototype

Delegation + Inheritance
现在要创建未来的class对象,使得Prototype能看到新创建的对象

类型转换与继承

派生类向基类的类型转换

Quote item;       // 基类对象
Bulk_quote bulk;  // 派生类对象
Quote *p = &item; // p指向Quote对象
p = &bulk;       // p指向bulk的Quote部分
Quote &r = bulk; // r绑定到bulk的Quote部分
Bulk_quote bulk;  // 派生类对象
Quote item(bulk); // 使用Quote::Quote(const Quote&)构造函数
item = bulk; // 使用Quote::operator=(const Quote&)赋值操作符
Bulk_quote bulk;  // 派生类对象
Quote *itemP = &bulk; // itemP的动态类型是Bulk_quote
// 即使itemP指针绑定的动态类型是Bulk_quote(派生类),但itemP的静态类型是Quote(基类)
// 编译器只能通过检查指针或引用的静态类型来判断该转换是否合法
Bulk_quote *bulkP = itemP; // 错误,不能将基类转换成派生类

静态类型 vs. 动态类型

动态绑定(dynamic binding/ run-time binding), 多态性, 虚函数,虚函数表

显式类型转换

C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用
cast-name<type>(expression)

上一篇下一篇

猜你喜欢

热点阅读