首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在C++中我们实际上需要私有或受保护的继承?

为什么在C++中我们实际上需要私有或受保护的继承?
EN

Stack Overflow用户
提问于 2008-12-17 20:29:43
回答 5查看 40.3K关注 0票数 66

在C++中,我想不出有哪种情况下我想从基类继承私有/受保护:

代码语言:javascript
复制
class Base;
class Derived1 : private Base;
class Derived2 : protected Base;

它真的有用吗?

EN

回答 5

Stack Overflow用户

发布于 2008-12-17 12:36:30

Private在相当多的情况下可能很有用。其中只有一个是策略:

Is partial class template specialization the answer to this design problem?

另一种有用的情况是禁止复制和赋值:

代码语言:javascript
复制
struct noncopyable {
    private:
    noncopyable(noncopyable const&);
    noncopyable & operator=(noncopyable const&);
};

class my_noncopyable_type : noncopyable {
    // ...
};

因为我们不希望用户有一个指向我们的对象的noncopyable*类型的指针,所以我们私有地派生。这不仅适用于不可复制类,也适用于许多其他此类类(策略是最常见的)。

票数 40
EN

Stack Overflow用户

发布于 2008-12-17 14:21:14

公共继承模型是-A。

非公共继承模型是-IMPLEMENTED-IN-TERMS OF。

包含模型HAS-A,等同于is -IMPLEMENTED-IN-TERMS OF。

Sutter on the topic。他解释了什么时候你会选择非公共继承而不是容器来实现细节。

票数 16
EN

Stack Overflow用户

发布于 2008-12-17 16:01:34

例如,当您想要重用实现,而不是类的接口并覆盖它的虚函数时。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/374399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档