前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++核心准则C.52:合理使用继承的构造函数

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

作者头像
面向对象思考
发布2020-03-25 16:14:18
4280
发布2020-03-25 16:14:18
举报
文章被收录于专栏:C++核心准则原文翻译

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,我不会重新实现它们。

代码语言:javascript
复制
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(反面示例)

代码语言:javascript
复制
struct Rec2 : public Rec {
    int x;
    using Rec::Rec;
};

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

这就是需要进一步初始化的例子。如果派生类没有增加数据成员只是增加一些功能,就可以使用using Rec::Rec这种方法导入基类的构造函数。对于上面的例子也可以考虑使用类内初始化器初始化数据成员x。

Enforcement

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


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

关注【面向对象思考】轻松学习每一天!

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 面向对象思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档