首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cpp继承问题

cpp继承问题
EN

Stack Overflow用户
提问于 2011-08-22 14:18:34
回答 2查看 325关注 0票数 2

除了继承之外,类还需要将其函数作为虚拟函数吗?

在运行时会发生什么,其中基类被继承,而派生类没有实现一些基类函数,第三个类调用在基类中定义为虚拟的未定义方法。seg错误或者它会调用基类函数吗?

如果我不想在派生类上定义基类中的所有函数,但仍然有必要的继承,该怎么办?

EN

回答 2

Stack Overflow用户

发布于 2011-08-22 14:24:41

除了继承之外,类还需要什么其他原因才能将其函数作为虚拟函数?

如果您不处理继承,那么使用virtual函数是不合理的。两者都是为对方准备的。

在运行时发生了什么,其中一个基类被继承,而派生类没有实现一些基类函数,而第三个类调用了在基类中定义为虚的未定义方法。seg错误或者它会调用基类函数吗?

如果派生类在其主体中根本没有对virtual函数进行任何声明,那么(直接)基类virtual函数将通过派生类object来调用。另一方面,如果您只是在派生类中声明virtual函数,而没有定义它,那么这是一个链接器错误。无分段故障。

如果我不想在派生类上定义基类中的所有函数,但仍然具有必要的继承,该怎么办?

虽然这一点并不清楚,但我要说的是,您根本不需要在派生类中声明/定义virtual函数(您不希望这样做)。它将使用基类virtual函数。

票数 3
EN

Stack Overflow用户

发布于 2011-08-22 14:25:04

如果不重新实现virtual方法,调用方将调用基类方法。这就是使用继承的意义,IMO。

如果不希望基类实现虚方法,可以这样声明它:

代码语言:javascript
复制
class Demo {
    void foo() = 0;
};

这就是所谓的抽象类。请注意,您不能创建此类类的实例。任何从Demo继承的类都必须实现foo(),否则它也将是一个抽象类,因此不能实例化。

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

https://stackoverflow.com/questions/7143772

复制
相关文章

相似问题

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