关于virtual关键字的问题

Gzd2003 2008-11-14 10:39:42
今天看到这样的类继承申明:
class Derived:virtual public Base
{
......

virtual关键字能写在这个位置吗?什么含义呢?
...全文
142 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackzhhuang 2008-11-14
  • 打赏
  • 举报
回复
virtual继承应该每本C++的书都有吧?

虚继承会生成一个指向虚继承下来的父类,为什么要这样呢?因为多重继承的时候会有可能有多个虚函数表,指向父类的指针可以访问到父类的虚函数表。

class Father
{
int i;
int j;
};

class Son : virtual public Father
{

};

int main()
{
std::cout << sizeof(Son);

getchar();
}

输出12。
就呆在云上 2008-11-14
  • 打赏
  • 举报
回复
virtual怎么写跟public的位置没有关系的,而且他不仅仅可以作用在函数上面,还可以作用于类表示这个是一个虚继承,
虚继承有点复杂,他会生成一个vbptr,但是对于生成或者不生成vptr要看有没有新的虚函数的产生,hoho好复杂了
反正有一定可以肯定的就是位置不是问题
如下:
class base
{
public:
virtual int a(){}
protected:
private:
};
class derived : virtual public base
{
public:
virtual int b() {}
protected:
private:
};


//////////////////////////////////////////////////////////////////////////
//或者
class base
{
public:
virtual int a(){}
protected:
private:
};
class derived : public virtual base
{
public:
virtual int b() {}
protected:
private:
vcgaoshou 2008-11-14
  • 打赏
  • 举报
回复
virtual public Base 表示Base为虚基类
weidong0210 2008-11-14
  • 打赏
  • 举报
回复
up
gccdy 2008-11-14
  • 打赏
  • 举报
回复
UP..........
cyj626 2008-11-14
  • 打赏
  • 举报
回复
学习
toadzw 2008-11-14
  • 打赏
  • 举报
回复
解决多重继承中的多条路径问题,用到virtual表明为虚基类,这样在生成派生类时将会先生一个基类部分,其他地方用到的这个基类的时候都是以指针指向他,而不用再生成一个,因而解决了多重继承中的菱形问题
liumingrong 2008-11-14
  • 打赏
  • 举报
回复
虚拟继承,以保证基类在后继子类中只有一份
比如标准库的流对象用到这种继承
Vegertar 2008-11-14
  • 打赏
  • 举报
回复
hai040 2008-11-14
  • 打赏
  • 举报
回复
只是多重继承中有用
a
/ \
b c
\ /
d
这种,有virtual,a的数据在d中只有一份,没virtual,有两份
xxgamexx 2008-11-14
  • 打赏
  • 举报
回复
是的

调用的顺序应该是

a-b-c-d

或者

a-c-b-d
nsh_nsh 2008-11-14
  • 打赏
  • 举报
回复
virtual解决了多重继承的二义性问题
更重要的是,调用的时候直接调用最顶层基内的,而不是调用直接基内的
比如
a
/ \
b c
\ /
d
这样在d中就直接调用a中的而不需要从b或者c经过,这样是不是效率就高咯呢?
Big鹏 2008-11-14
  • 打赏
  • 举报
回复
class Derived:virtual public Base
{
......

virtual关键字能写在这个位置吗?什么含义呢?

答;当多个子类继承同一父类时(特别常用的菱形继承,如一楼的!),
便用这种方式,叫做虚继承。目的是解决子类重复继承父类时存在多份拷贝的问题。
Longinc 2008-11-14
  • 打赏
  • 举报
回复
看书学习
小人物- 2008-11-14
  • 打赏
  • 举报
回复
mark
xxgamexx 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hai040 的回复:]
只是多重继承中有用
a
/ \
b c
\ /
d
这种,有virtual,a的数据在d中只有一份,没virtual,有两份
[/Quote]

virtual是解决了初始化重复问题吧?

这里是不是有歧义?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧