C++核心准则C.52:合理使用继承的构造函数
C.52: Use inheriting constructors to import constructors into a derived class that does not need further explicit initialization
C.52:使用继承的构造函数功能将构造函数导入不再需要进一步明确初始化的派生类
Example, bad(反面示例)
C.52:使用继承的构造函数功能将构造函数导入不再需要进一步明确初始化的派生类
If you need those constructors for a derived class, re-implementing them is tedious and error-prone.
如果派生类需要那些构造函数,重新实现它们的工作单调乏味而且容易发生错误。
std::vector has a lot of tricky constructors, so if I want my own vector, I don't want to reimplement them:
std::vector有大量的构造函数很难用,因此如果我需要自己的vector,我不会重新实现它们。
class Rec {
// ... data and lots of nice constructors ...
};
class Oper : public Rec {
using Rec::Rec;
// ... no data members ...
// ... lots of nice utility functions ...
};
struct Rec2 : public Rec {
int x;
using Rec::Rec;
};
Rec2 r {"foo", 7};
int val = r.x; // uninitialized
这就是需要进一步初始化的例子。如果派生类没有增加数据成员只是增加一些功能,就可以使用using Rec::Rec这种方法导入基类的构造函数。对于上面的例子也可以考虑使用类内初始化器初始化数据成员x。
Make sure that every member of the derived class is initialized.
保证派生类的所有成员都被初始化。
https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c52-use-inheriting-constructors-to-import-constructors-into-a-derived-class-that-does-not-need-further-explicit-initialization
觉得本文有帮助?请分享给更多人。
关注【面向对象思考】轻松学习每一天!
面向对象开发,面向对象思考!
评论