首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承一个非平凡类的情况?

继承一个非平凡类的情况?
EN

Stack Overflow用户
提问于 2009-03-01 23:38:59
回答 2查看 254关注 0票数 0

我在读C#中的sealed关键字。我不记得我最后一次继承标准库是什么时候了。在c++中,我记得继承了一个std接口,它定义了一些类型,并使用了我的一些参数。但那只是一个微不足道的接口

从我的脑海中,我不记得我继承的任何类都没有期望被继承的虚函数。谁能告诉我在什么情况下你需要继承一个不是接口的非平凡类?

我甚至可以说,最好不要继承一个类,除非它有虚函数。这是一个好的经验法则吗?

注意:在需要将对象作为另一个类传递的情况下,我使用操作符SomeClass& SomeClass() { return m_someClass;}。它工作得很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-02 00:00:12

它实际上是在C++中使用的,因为所有这些不是一种继承(例如,继承一个实现,mixins,boost::noncopyable,你从它继承并使你的类不可复制,boost::operators,你从某个类继承,它会向你的类添加一些运算符)。此外,在使用C++类型进行元编程时,从另一个类型继承是组成类型的最简单方法之一。

另一种情况是,继承自没有虚函数但充当“某种”接口的类的情况是静态多态性(像CRTP这样的技术,其中类ConcreteA : BaseA)。它们不需要虚函数,因为一切都是在编译时解决的。

然而,如果你想以多态的方式对待你的类,你真的应该至少有一个方法是虚的,那就是析构函数。也有例外,但很少见。

即使你有一个多态的层次结构,你有时也会从具体的类派生出来。一个例子是从TextEdit派生的SingleLineEdit。然而,这有点危险,因为它破坏了父类的封装(例如。它的方法可能需要一些实现细节,您必须在子类中尊重并保留它们-这可能很棘手,因为它们是实现细节,在下一个版本中可能会在没有通知的情况下更改,等等。)

票数 0
EN

Stack Overflow用户

发布于 2009-03-01 23:47:09

我认为面向对象编程的关键概念是多态性。如果从特定类继承不允许利用多态性,那么继承又有什么意义呢?因此,如果没有要重写的方法,那么就不要子类化。这只会增加代码的复杂性。如果您想要大量相同的功能,只需将现有类包装在您自己的类中即可。

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

https://stackoverflow.com/questions/600839

复制
相关文章

相似问题

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