优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++核心准则C.52:合理使用继承的构造函数功能

nanyue 2024-07-18 03:50:09 技术文章 6 ℃

C.52: Use inheriting constructors to import constructors into a derived class that does not need further explicit initialization
C.52:使用继承的构造函数功能将构造函数导入不再需要进一步明确初始化的派生类

Reason(原因)

If you need those constructors for a derived class, re-implementing them is tedious and error-prone.

如果派生类需要那些构造函数,重新实现它们的工作单调乏味而且容易发生错误。

Example(示例)

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 ...
};

Example, bad(反面示例)


struct Rec2 : public Rec {
 ? ?int x;
 ? ?using Rec::Rec;
};

Rec2 r {"foo", 7};
int val = r.x; ? // uninitialized

译者注:这就是需要进一步初始化的例子。如果派生类没有增加数据成员只是增加一些功能,就可以使用using Rec::Rec这种方法导入基类的构造函数。

Enforcement(实施建议)

Make sure that every member of the derived class is initialized.

保证派生类的所有成员都被初始化。

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c51-use-delegating-constructors-to-represent-common-actions-for-all-constructors-of-a-class


觉得本文有帮助?请分享给更多人。

更多精彩文章请关注微信公众号【面向对象思考】!

面向对象开发,面向对象思考!

最近发表
标签列表