第五节 · 偷懒的诀窍 · 合成函数与虚析构

良好的类设计是写出高质量代码的关键。这一节我们探讨一些高级的类设计技巧。


友元

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