第五节 · 偷懒的诀窍 · 合成函数与虚析构
良好的类设计是写出高质量代码的关键。这一节我们探讨一些高级的类设计技巧。
友元
class Box
{
private:
double width;
public:
Box(double w) : width(w) {}
// 友元函数:可以访问私有成员
friend void printWidth(const Box& b);
// 友元类:整个类都可以访问
friend class BoxFactory;
};
void printWidth(const Box& b)
{
cout << "Width: " << b.width << endl; // OK:友元可以访问
}
class BoxFactory
{
public:
static Box createBox(double w)
{
Box b(w);
b.width *= 2; // OK:友元类可以访问
return b;
}
};注意:友元会破坏封装,谨慎使用。
内部类
单例模式
工厂模式
PIMPL 模式(指针到实现)
优点:
隐藏实现细节
减少编译依赖
改变实现不需要重新编译用户代码
Builder 模式
不可复制类
类型擦除
命名参数模式
习题
实现一个线程安全的单例类。
使用 PIMPL 模式重构一个类。
设计一个使用 Builder 模式的 HTML 生成器。
Last updated