| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 630 人关注过本帖
标题:C++中结构体的疑惑
只看楼主 加入收藏
jackietin
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2009-10-30
结帖率:100%
收藏
 问题点数:0 回复次数:3 
C++中结构体的疑惑
#include <iostream>
using namespace std;
struct V {
V(int a=0) { cout<<"V"<<a; }
};
struct A : virtual V {
A(int a);
};
struct B : virtual V {
B(int a=8);
};
struct C : A, B {
C(int a);
};
struct D : C, B {
D(int);
};
A::A(int i) :V(i) { cout<<"A"<<i; }
B::B(int i) { cout<<"B"<<i; }
C::C(int i) :A(i),B(i),V(i) { cout<<"C"<<i; }
D::D(int i) :C(i) { cout<<"D"<<i; }

int main(){
V v(1); cout<<endl;
A a(2); cout<<endl;
B b(3); cout<<endl;
C c(4); cout<<endl;
D d(5); cout<<endl;
return 0;
}

测试通不过,错误提示:
C:\Documents and Settings\IBM\桌面\tt.cpp(15) : error C2584: 'D' : direct base 'B' is inaccessible; already a base of 'C'
C:\Documents and Settings\IBM\桌面\tt.cpp(9) : see declaration of 'B'

另外,结构体和类有什么区别啊?怎么看上去差不多呢。。用法上有什么差异?
搜索更多相关主题的帖子: 结构体 
2009-11-16 20:43
jackietin
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2009-10-30
收藏
得分:0 
我明白了,原来D继承了两次B,一次D->C->B,一次D->B...删掉一个就OK了。
如果删掉struct D : C, B {D(int);}; 中的B。输出结果是:
V1
V2A2
V0B3
V4A4B4C4
V0A5B5C5D5

现在大概明白问什么这么输出了,还是期待有人详细解释一下:)
2009-11-16 21:53
qlc00
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:157
专家分:540
注 册:2007-11-26
收藏
得分:0 
C++中除了struct成员默认是public的,而类成员默认是private的,其他没任何区别

Anything is possible!
2009-11-16 22:50
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
收藏
得分:0 
回复 2楼 jackietin
个人觉得多继承还是少用

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-11-16 23:44
快速回复:C++中结构体的疑惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024117 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved