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喔? 展开
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喔? 展开
2个回答
展开全部
基类中的函数一定要声明virtual才是虚的,在某个虚函数的第一个声明所在的那个类里,该函数必须予以实现(除非它被声明为纯虚函数)。如它被声明为纯虚函数,继承它的类必须予以实现。虚函数、纯虚函数的区别在于虚函数在本类要实现,纯虚函数不用。但有纯虚函数的类不能实例化,只能作为指针使用。
问题1:
Base 里没有virtual, 但是继承Base的A里是可以有的,如此base的函数就被覆盖了,除非明确说明对象要调用的是那个函数(如调用A::foo),否则被选用的总是最适合它的覆盖函数。
问题2:
B里的foo()的前面不需要标记,因A已标记了foo是虚函数。
问题3:
如果B里没写出来foo(),他能直接用A的foo()。调用跟普通用法一样.
B b;
b.foo();
问题1:
Base 里没有virtual, 但是继承Base的A里是可以有的,如此base的函数就被覆盖了,除非明确说明对象要调用的是那个函数(如调用A::foo),否则被选用的总是最适合它的覆盖函数。
问题2:
B里的foo()的前面不需要标记,因A已标记了foo是虚函数。
问题3:
如果B里没写出来foo(),他能直接用A的foo()。调用跟普通用法一样.
B b;
b.foo();
展开全部
Base 里没有virtual, 但是继承Base的A里可以有? ----可以有的
B里的foo()的前面不需要标记virtual喔? ------加不加都可以,不过建议加上,一看就知道
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(),因为是虚函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询