vc 6.0 为什么不能多继承

wangfu20100518 2010-06-02 10:36:50
#include <iostream>
#include <string>
using namespace std;
class Class
{
public:
Class(string str):str(str),num(0) {cout<<"Class(string "<<str<<") 被调用了!!!"<<endl;}
Class(int num):str("null"),num(num) {cout<<"Class(num "<<num<<") 被调用了!!!"<<endl;}
private:
int num;
string str;

};
class base: public Class
{
public:
base(string str):Class("base"),str(str),num(0) {cout<<"base(string "<<str<<") 被调用了!!!"<<endl;}
base(int num):Class("base"),str("null"),num(num) {cout<<"base(num "<<num<<") 被调用了!!!"<<endl;}
private:
int num;
string str;

};

class base1:virtual public base
{
public:
base1(string str):base("base1 virtual"){cout<<"base1(string "<<str<<") 被调用了!!!"<<endl;}
base1(int num):base("base1 virtual"){cout<<"base1(num "<<num<<") 被调用了!!!"<<endl;}
private:
int num;
string str;
};

class base2:virtual public base
{
public:
base2(string str):base("base2 virtual"){cout<<"base2(string "<<str<<") 被调用了!!!"<<endl;}
base2(int num):base("base2 virtual"){cout<<"base2(num "<<num<<") 被调用了!!!"<<endl;}
private:
int num;
string str;
};

class derived:public base1,public base2
{
public:
derived(string str):base1("derived"),base2("derived"),base("derived"){cout<<"derived(string "<<str<<") 被调用了!!!"<<endl;}
derived(int num):base1("derived"),base2("derived"),base("derived"){cout<<"derived(num "<<num<<") 被调用了!!!"<<endl;}
private:
int num;
string str;
};
class final:public derived,public Class
{
public:
final(string str):derived("final"),base("final"),Class("final"){cout<<"final(string "<<str<<") 被调用了!!!"<<endl;}
final(int num):derived("final"),base("final"),Class("final"){cout<<"final(num "<<num<<") 被调用了!!!"<<endl;}
private:
int num;
string str;
};

void main()
{final a("aaa");
}

提示错误是:"error C2584: 'final' : direct base 'Class' is inaccessible; already a base of 'derived'"
...全文
259 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
YODOYODO 2010-06-04
  • 打赏
  • 举报
回复
我真觉得多继承没有什么必要, 可能一直以来没接触过这么高阶的语法技术吧.
单根集成 + 虚继承纯虚类, 就够了.
暗黑帝国 2010-06-04
  • 打赏
  • 举报
回复
可以多继承,如果两个基类有相同的接口,要虚拟继承
天高云淡 2010-06-03
  • 打赏
  • 举报
回复
vc6是支持多继承的.只是不能像楼主这样使用,因为derived的父类就是从Class派生而来,final继承于derived,本身就具有Class结构了,如果还能从Class中派生就会导致两个Class结构,这就有问题了.
zyrr159487 2010-06-03
  • 打赏
  • 举报
回复
看的有点晕
Poptang 2010-06-03
  • 打赏
  • 举报
回复
多重继承,如果继承的子类有着共同的子类,需要用到虚拟继承,否则会出现二义性,修改final的定义如下:
class final:virtual public derived,virtual public Class
Xiaoloveliuforever 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 weixiaoshashou 的回复:]

谁说不能多继承。
[/Quote]

谁说的?
blastorm 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ww884203 的回复:]
从来不用多重继承的飘过~
个人观点:多重继承是程序复杂,难以维护,难以理解的重要原因之一,能够不要用就不要用
[/Quote]

本人不支持2楼的观点,我觉得C++的很多特性都是一把强大的利器,虽然用得不对很可能出事,但不能因噎费食
FingerStyle 2010-06-03
  • 打赏
  • 举报
回复
vc6 虽然在标准前出来的, 但是对多继承这种东西支持应该是没问题的。
Jerry_Lee01 2010-06-03
  • 打赏
  • 举报
回复
虚函数不就是可以解决多继承的二义性问题的吗?
可以多继承呀
weixiaoshashou 2010-06-03
  • 打赏
  • 举报
回复
谁说不能多继承。
sabflying 2010-06-03
  • 打赏
  • 举报
回复
'derived'定义为虚函数就OK了,
KudoCC 2010-06-03
  • 打赏
  • 举报
回复
你弄的多继承,太复杂了
蜥蜴枪王 2010-06-03
  • 打赏
  • 举报
回复
可以多重继承 这时C++语言的特性之一...跟编译器没什么关系吧...
  • 打赏
  • 举报
回复
可以多继承啊
但是注意同源的不要交叉
Gary@Tokyo 2010-06-03
  • 打赏
  • 举报
回复
代码没看,但是VC6.0是可以多重继承的,我们开发工具就是6.0,也用到多重继承。
starsoul0927 2010-06-03
  • 打赏
  • 举报
回复
可以啊。。我也用vc6。。可以多继承啊。。
jianglutian 2010-06-02
  • 打赏
  • 举报
回复
jlt@jlt-laptop:~/codeWorks$ ./1
Class(string base) 被调用了!!!
base(string final) 被调用了!!!
base1(string derived) 被调用了!!!
base2(string derived) 被调用了!!!
derived(string final) 被调用了!!!
Class(string final) 被调用了!!!
final(string aaa) 被调用了!!!


忘记把结果发上去了……
jianglutian 2010-06-02
  • 打赏
  • 举报
回复
jlt@jlt-laptop:~/codeWorks$ g++ 1.cpp -o 1
1.cpp:55: warning: direct base ‘Class’ inaccessible in ‘final’ due to ambiguity


jlt@jlt-laptop:~/codeWorks$ g++ --version
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
liutengfeigo 2010-06-02
  • 打赏
  • 举报
回复

你去问微软把。。。
VC6.0。。。我只有上机才用~
ww884203 2010-06-02
  • 打赏
  • 举报
回复
从来不用多重继承的飘过~
个人观点:多重继承是程序复杂,难以维护,难以理解的重要原因之一,能够不要用就不要用
加载更多回复(1)

64,661

社区成员

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

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