C++多重继承的问题

Jeffrey84 2010-06-11 02:30:43

class A
{
public:
virtual void Test() = NULL;
};

class B : public virtual A
{
public:
virtual void Test() { }
};

class C : public virtual A
{
public :
virtual void Test2() = NULL;
};


这个情况下,如果我要一个类D 同时集成 B, C 该怎么做才能正确实现 C接口的同时还复用 B对接口A的实现?

下面的实现有警告 C4250

class D : public B, public C
{
public:
virtual void Test2()
{
this->Test();
}
};


...全文
197 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2010-06-12
  • 打赏
  • 举报
回复
不要带着C#的眼镜来学、用C++。

[Quote=引用 17 楼 jeffrey84 的回复:]

囧,其实我是想模拟C#的interface
[/Quote]
cattycat 2010-06-11
  • 打赏
  • 举报
回复
对可能造成二义的直接用this->B::Test()这种方式比较好。
模拟interface其实就是抽象类,只声明接口的,由子类实现。这种菱形的继承方式还是少用。
可以看effective c++条款43。
liutengfeigo 2010-06-11
  • 打赏
  • 举报
回复
MARK
y7501272 2010-06-11
  • 打赏
  • 举报
回复
看着300分流口水的人
xiaolinxianju 2010-06-11
  • 打赏
  • 举报
回复
设置抽象函数就可以了吧,楼主可以看看抽象函数的设计。抽象函数好像就是用于干楼主说的这个事的。
Jeffrey84 2010-06-11
  • 打赏
  • 举报
回复
囧,其实我是想模拟C#的interface
happy08god 2010-06-11
  • 打赏
  • 举报
回复
虚函数,虚继承太多不一定好。尽量不要使用这样的结构,除非你对语法掌握很好,这样也不方便今后代码的测试和重用。
太乙 2010-06-11
  • 打赏
  • 举报
回复
建议lz看看effective c++

条款43: 明智地使用多继承

http://tonyduan823.spaces.live.com/blog/cns!1AF1C2173485F09C!1208.entry
seadragonzhhl 2010-06-11
  • 打赏
  • 举报
回复
虚继承。。
thehunters 2010-06-11
  • 打赏
  • 举报
回复
virtual继承
pengzhixi 2010-06-11
  • 打赏
  • 举报
回复
不好意思,没看到是virtual继承那就不要再另外实现Test();
pengzhixi 2010-06-11
  • 打赏
  • 举报
回复

class D:public B,public C{
public:
void Test2()
{
this->B::Test();
}
void Test(){cout<<"d"<<endl;}
};



我觉得这样稍微合理点,否则,你D里面有两个A,意味着你有一个从C继承的A里面的Test你没实现,这样D应该还是属于抽象类。另外=NULL改成=0
chainyu 2010-06-11
  • 打赏
  • 举报
回复
有二义性的问题。建议不要使用多继承,会使结构变得比较乱。
调用方法就向#8说的那样加上::具体的那个继承(基)类
悲剧哥 2010-06-11
  • 打赏
  • 举报
回复
this->B::test()
this->A::test()
taodm 2010-06-11
  • 打赏
  • 举报
回复
1 就不要搞virtual继承。
2 B::Test();
注意重看书补这些基础语法课。
悲剧哥 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zyc486486 的回复:]
D类里是不是还要再写一个test类?
[/Quote]
函数,写错了
悲剧哥 2010-06-11
  • 打赏
  • 举报
回复
D类里是不是还要再写一个test类?
lovesi3344 2010-06-11
  • 打赏
  • 举报
回复
你真聪明
以后哥学你了

[Quote=引用 4 楼 jeffrey84 的回复:]
我在灌水区可以发300分,所以先发灌水区再转C++
[/Quote]
Jeffrey84 2010-06-11
  • 打赏
  • 举报
回复
我在灌水区可以发300分,所以先发灌水区再转C++
2010-06-11
  • 打赏
  • 举报
回复
。。。貌似转过去了已经,就算帮顶吧。
加载更多回复(2)

64,685

社区成员

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

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