Item 33. 抽象基类模仿秀(Manufacturing Abstract Bases)

Item 33. Manufacturing Abstract Bases

抽象基类描述了一个问题的抽象概念,它不能被实例化。
class ABC {
  public:
    virtual ~ABC();
    virtual void anOperation() = 0; // pure
    //...
};
一个类中有了一个纯虚函数就成为了抽象类,编译器可以保证ABC不能实例化。

有时候一个类没有候选的纯虚函数,但又想让它不能被实例化,如何办?

1、构造函数和拷贝构造函数声明为保护成员
class ABC {
  public:
    virtual ~ABC();
  protected:
    ABC();
    ABC( const ABC & );
    //...
};
class D : public ABC {
    //...
};

2、将析构函数声明为纯虚函数,并提供其实现
class ABC {
  public:
    virtual ~ABC() = 0;
    //...
};
//...
ABC::~ABC() { ... }

3、当一个类根本就没有虚函数,也没需要显式声明构造函数时,就把非虚析构函数声明为保护的
class ABC {
  protected:
    ~ABC();
  public:
    //...
};

posted on 2005-04-16 12:13  张大大123  阅读(74)  评论(0编辑  收藏  举报

导航