08 December 2022

C++ 核心指南目录

C.126: An abstract class typically doesn’t need a user-written constructor

理由

抽象类没有数据需要构造函数进行初始化。

例子

class Shape {
public:
    // no user-written constructor needed in abstract base class
    virtual Point center() const = 0;    // pure virtual
    virtual void move(Point to) = 0;
    // ... more pure virtual functions...
    virtual ~Shape() {}                 // destructor
};

class Circle : public Shape {
public:
    Circle(Point p, int rad);           // constructor in derived class
    Point center() const override { return x; }
};

例外

  • 某些情况下,基类的构造函数可能会有用,比如注册一个对象到某个地方,可能需要用到构造函数。
  • 极其少见的情况:抽象类要保留一些数据,给继承类共享(统计数据、 debug 信息等)。这种类一般会有构造函数。但是请注意,这种类也倾向与要求虚继承。

强化

  • 标记有构造函数的抽象类。