读书笔记:Effective C++ 2.0 版,条款39(避免向下转换)、条款40(用构成实现有一个和用...实现)

条款39: 避免 "向下转换" 继承层次

从一个基类指针到一个派生类指针 ---- 被称为 "向下转换".

应该使用虚函数替代,避免向下转换。

安全的向下转换,过C++的dynamic_cast运算符(参见条款M2)来实现。

条款40: 通过分层来体现 "有一个" 或 "用...来实现"

使某个类的对象成为另一个类的数据成员,从而实现将一个类构筑在另一个类之上,这一过程称为 "分层"(Layering)。"分层" 这一术语有很多同义词,它也常被称为:构成(composition),包含(containment)或嵌入(embedding)。

c 复制代码
class Address { ... }; 
class PhoneNumber { ... };
class Person {
public:
private:
  string name;                   // 下层对象
  Address address;               // 同上
  PhoneNumber voiceNumber;       // 同上
  PhoneNumber faxNumber;         // 同上
};

用 list实现有序set

c 复制代码
template<class T>
class Set {
public:
  bool member(const T& item) const;
  void insert(const T& item);
  void remove(const T& item);
  int cardinality() const;
private:
  list<T> rep;// 表示一个Set
};
相关推荐
syagain_zsx1 小时前
WebSocket 教程:websocketpp 写 echo 服务端
linux·网络·c++·websocket·网络协议·工具库
大陈子编程1 小时前
C++ CSP-J 与 CSP-S 题单:洛谷 140 题知识点全覆盖
c++
张小姐的猫2 小时前
【MySQL】数据类型
android·linux·数据库·c++·mysql·adb·php
讳疾忌医丶2 小时前
编译器眼中的 C++ 循环:从指针别名、IEEE 754 结合律到 SIMD 语义证明
开发语言·c++
小徐不徐说3 小时前
C++ 机器视觉入门:从零搭建 AOI 开发环境(OpenCV + CMake)
开发语言·c++·opencv
誰能久伴不乏3 小时前
【无标题】
c++·qt·机器人
大陈子编程3 小时前
C++ 背包九讲:从入门到精通的动态规划专题
开发语言·c++·动态规划
努力实干16 小时前
面向对象设计原则——C++
开发语言·c++·数码相机
syagain_zsx19 小时前
jsoncpp 使用指南:编译链接、Json::Value 取值与高频坑
c++·json·库·http格式
布莱克60520 小时前
理解 = delete 与 = default:两种赋值语义的差异
c++