注册 登录
编程论坛 C++教室

请教关于虚继承的问题

wenxinwukui 发布于 2010-12-03 10:38, 491 次点击
请看一下下面这个程序:
class Top{
public:
    virtual ~Top(){}
};

class Left : virtual public Top {
public:
    void f(){}
};

class Right : virtual public Top{
public:
    void g(){}
};

class Bottom : public Left, public Right{};

想请教各位一下,在继承中加上virtua 和不加有什么区别:也就是对于上例子中,如果只关心Left这个类,那么它和
class Left : public Top{
    ...
}
有没有区别啊?
2 回复
#2
lintaoyn2010-12-03 16:12
对Left 类的使用者并没有什么区别。但是在多重继承时就会有区别,就对Bottom为说只有一个Top。无论是通过Left还是Right和Bottom里的成员函数来修改Top里的数据成员,都对针对一份Top对象的拷贝。
用词有些错误,但大致能表达一些你想知道的。
#3
laoyang1032010-12-03 18:46
你的问题是菱形继承问题   把菱形的上定点类声明为虚基类

那么 top类中的数据成员只能被继承一次  所以left类和right类只有一个有top类的成员

那么button类虽然是多继承  但只有一份top类的拷贝
1