c++ virtual 的用法。。。虚函数、纯虚函数==有什么区别呢.....

classBase{public:intdata;};classA:publicBase{public:virtualvoidfoo();}classB:publicA{... class Base{
public:
int data;
};

class A:public Base{
public:
virtual void foo();
}

class B:public A{
public:
void foo();
}

Base 里没有virtual, 但是继承Base的A里可以有?
B里的foo()的前面不需要标记virtual喔?
展开
 我来答
ansenyou
推荐于2017-09-07 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.1万
采纳率:8%
帮助的人:7986万
展开全部
基类中的函数一定要声明virtual才是虚的,在某个虚函数的第一个声明所在的那个类里,该函数必须予以实现(除非它被声明为纯虚函数)。如它被声明为纯虚函数,继承它的类必须予以实现。虚函数、纯虚函数的区别在于虚函数在本类要实现,纯虚函数不用。但有纯虚函数的类不能实例化,只能作为指针使用。
问题1:

Base 里没有virtual, 但是继承Base的A里是可以有的,如此base的函数就被覆盖了,除非明确说明对象要调用的是那个函数(如调用A::foo),否则被选用的总是最适合它的覆盖函数。
问题2:
B里的foo()的前面不需要标记,因A已标记了foo是虚函数。
问题3:
如果B里没写出来foo(),他能直接用A的foo()。调用跟普通用法一样.
B b;
b.foo();
mia☆jiancha☆ce6608
2012-12-28 · TA获得超过1526个赞
知道小有建树答主
回答量:713
采纳率:100%
帮助的人:494万
展开全部
Base 里没有virtual, 但是继承Base的A里可以有? ----可以有的

B里的foo()的前面不需要标记virtual喔? ------加不加都可以,不过建议加上,一看就知道
追问
谢谢,还有一个小迷惑...

class B:public A{
public:
void zoo();
void woo();
}
//如果B里没写出来foo(),那他能直接用A的foo()吗?
或者说..如果B的foo和A的一样,在B里怎么写呢?
追答
能用A的foo()
如果B里也有foo(),那就是调用B里的foo(),因为是虚函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式