C++中,虚基类一般用于实现什么样的高层语义?

virtualxmars 2012-10-31 06:59:07
在OOP/OOD中,有各种各样的高级语义,如is-a,has-a,implements of……
技术上对它的解读是没什么疑惑的了。但我想知道的是高层来说,虚基类可以用来实现什么样的语义呢?
...全文
142 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
驴被脑袋踢了 2012-10-31
  • 打赏
  • 举报
回复
主要是菱形继承时,防止出现歧义,比如:
A是B和C的共有父类,D是B和C的共有子类,这样A中的类成员在D中会存在两个,会有歧义,
如果将A定义为虚基类,采用虚继承,这样D中只存在一个A中类成员的拷贝,这样可防止歧义,
差不多是这样
mujiok2003 2012-10-31
  • 打赏
  • 举报
回复
这叫抽象类/接口吧。
[Quote=引用 2 楼 的回复:]
虚基类为接口
[/Quote]
mujiok2003 2012-10-31
  • 打赏
  • 举报
回复
菱形继承时,防止有个基类子对象。

struct A
{
int b;
};

struct B1 : virutal public A
{
int b1;
};

struct B2 : virutal public A
{
int b2;
};

struct C : public B1, B2
{
int c;
};

C c; //c中只有一个A的子对象


[Quote=引用 5 楼 的回复:]
抽象类才应该是方法接口吧

class Abs {
virtual void fun() = 0;
};

而虚基类呢?
class VBase {
};

class C : virtual VBase {};

我想了解的是后面的这种情况
[/Quote]
mujiok2003 2012-10-31
  • 打赏
  • 举报
回复
虚基类指虚继承的基类?
virtualxmars 2012-10-31
  • 打赏
  • 举报
回复
抽象类才应该是方法接口吧

class Abs {
virtual void fun() = 0;
};

而虚基类呢?
class VBase {
};

class C : virtual VBase {};

我想了解的是后面的这种情况
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:

虚基类为接口


虾米类型的接口呢?数据接口?方法调用接口?
[/Quote]
方法。。。
virtualxmars 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

虚基类为接口
[/Quote]

虾米类型的接口呢?数据接口?方法调用接口?
  • 打赏
  • 举报
回复
虚基类为接口

64,663

社区成员

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

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