CppCoreGuidelines C.126 抽象类一般不需要编写构造函数
08 December 2022
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
信息等)。这种类一般会有构造函数。但是请注意,这种类也倾向与要求虚继承。
强化
- 标记有构造函数的抽象类。