虚函数和纯虚函数的两个基础小问题

纯虚函数就是“强制”要求在派生出具体类的时候必须定义出的函数,否则该派生类就无法定义具体对象而虚函数则可重新定义也可以不重新定义而仅仅站在使用的角度去说,虚函数和纯虚函数... 纯虚函数就是“强制”要求在派生出具体类的时候 必须定义出的函数,否则该派生类就无法定义具体对象 而虚函数则可重新定义也可以不重新定义
而仅仅站在使用的角度去说,虚函数和纯虚函数都可以实现多态的功能
请问我上面这几句话对吗??
派生类如果继承了抽象基类中的纯虚函数,而在该派生类中没有对此纯虚函数进行定义 则该派生类扔为抽象类 不能用它实体定义对象
我的问题是:该派生类继承过来的纯虚函数在这个派生类中扔然为纯虚函数么??????
书上说不是...除非重新声明成纯虚函数...那是什么?虚函数??我又没有在这个派生类中具体定义继承过来的这个纯虚函数 为什么就不是纯虚函数了呢????
展开
 我来答
冰火梦幻
2010-09-22 · TA获得超过2308个赞
知道小有建树答主
回答量:1095
采纳率:57%
帮助的人:427万
展开全部
纯虚函数就是“强制”要求在派生出具体类的时候 必须定义出的函数,否则该派生类就无法定义具体对象 而虚函数则可重新定义也可以不重新定义
--说得对。

而仅仅站在使用的角度去说,虚函数和纯虚函数都可以实现多态的功能。
--说得对。

派生类如果继承了抽象基类中的纯虚函数,而在该派生类中没有对此纯虚函数进行定义 则该派生类扔为抽象类 不能用它实体定义对象
--说得对。

我的问题是:该派生类继承过来的纯虚函数在这个派生类中扔然为纯虚函数么??????
--说得对。

书上说不是...除非重新声明成纯虚函数...那是什么?虚函数??我又没有在这个派生类中具体定义继承过来的这个纯虚函数 为什么就不是纯虚函数了呢????
--其实,如果你不打算在某个派生类里实现基类的纯虚函数,那你最好连声明都别声明。如果声明了,那就加上=0。
如果不声明=0,编译器会将它视为非纯虚函数。
例如,基类Base有纯虚方法void Fun()=0
class C1: public Base
{
public: void Fun(); // 不写=0,也不写实现。
}

class C2: public C1
{
public: void Fun(){return;} //有实现了
}

这时你将无法实例化C2,因为C1的非纯虚函数没有实现,将产生连接错误。
Base *p = new C2;
C1 *p1 = new C2;
C2 *p2 = new C2;
这些都无法连接成功。
百度网友12b11d8
2010-09-23 · TA获得超过425个赞
知道小有建树答主
回答量:180
采纳率:100%
帮助的人:173万
展开全部
同意 冰火梦幻 的看法。

当在父类里声明一个函数为虚函数后,那么你实例化一个对象后,如果调用这个函数的话,如果你在子类中定义了这个函数(不需加virtual)的话,那么就调用子类中的函数,父类中的就不调用了。 如果没有定义,就调用父类的函数。
定义了纯虚函数的类成为抽象类,该纯虚函数必须被赋值为0。
该抽象类无法实例化对象,仅该类的子类可以实例化对象,并且抽象类中的纯虚函数必须在子类中有定义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叶小怜
2010-09-23 · TA获得超过408个赞
知道小有建树答主
回答量:379
采纳率:0%
帮助的人:262万
展开全部
java对这个问题搞的很清楚,c++就在这边自己跟自己过不去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式