问个关于继承的小问题

tiandi1986 2008-11-14 01:41:04
class A
{
public:int a;
};
class B:public A
{
public:int a;
};
class C:public B
{
public:int a;
};
按上面这些类的定义,如果要在main()函数中建C的对象,C kk;怎样调用基类A中的a??
“kk.B::A::a=3;”和“kk.B::(A::a)=3;”这样好像都不可以的,不知该怎么调用
...全文
85 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
霍大脚 2008-11-15
  • 打赏
  • 举报
回复
A也是C的基类啊
tiandi1986 2008-11-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 thinkingbetter 的回复:]
引用 11 楼 tiandi1986 的回复:
引用 5 楼 liumingrong 的回复:
你的编译器是古董吗?
C c;
c.B::A::a = 1;
c.A::a = 2;
都可以

可以吗????

我的也不行
请问?
用的那个编译器
[/Quote]
我用的是VC++6.0
“c.A::a = 2; ”可以的
但是“c.B::A::a = 1; ”却不可以,弹出的错误大致意思是A不是B的成员
thinkingbetter 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tiandi1986 的回复:]
引用 5 楼 liumingrong 的回复:
你的编译器是古董吗?
C c;
c.B::A::a = 1;
c.A::a = 2;
都可以

可以吗????
[/Quote]
我的也不行
请问?
用的那个编译器
tiandi1986 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liumingrong 的回复:]
你的编译器是古董吗?
C c;
c.B::A::a = 1;
c.A::a = 2;
都可以
[/Quote]
可以吗????
nullah 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liumingrong 的回复:]
你加上构造函数声明,编译器就不会帮你生成默认的了,
所以你需要实现构造函数,加个{}就ok,呵呵
引用 6 楼 nullah 的回复:
C/C++ code
#include <iostream>
using namespace std;

class A
{
public:
int a;
//A();//有此构造函数的话会报错
};

class B:public A
{
public:
int a;
//B();
};

class C:public B
{
public:
int a;
//C();
};

环境…
[/Quote]
忘了没定义了 晕 呵呵
liumingrong 2008-11-14
  • 打赏
  • 举报
回复
你加上构造函数声明,编译器就不会帮你生成默认的了,
所以你需要实现构造函数,加个{}就ok,呵呵
[Quote=引用 6 楼 nullah 的回复:]
C/C++ code
#include <iostream>
using namespace std;

class A
{
public:
int a;
//A();//有此构造函数的话会报错
};

class B:public A
{
public:
int a;
//B();
};

class C:public B
{
public:
int a;
//C();
};

环境:VS2005
但是我有个疑问为什么加上个构造函数 就会报错呢 [/Quote]
hai040 2008-11-14
  • 打赏
  • 举报
回复
没实现
A(){}
nullah 2008-11-14
  • 打赏
  • 举报
回复
error LNK2001: 无法解析的外部符号 "public: __thiscall C::C(void)" (??0C@@QAE@XZ)
1>D:\********\Visual Studio 2005\Projects\csdn\Debug\csdn.exe : fatal error LNK1120: 1 个无法解析的外部命令

贴上错误
nullah 2008-11-14
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

class A
{
public:
int a;
//A();//有此构造函数的话会报错
};

class B:public A
{
public:
int a;
//B();
};

class C:public B
{
public:
int a;
//C();
};

int main()
{
C kk;
kk.A::a = 12;
cout << kk.A::a << endl;
cout << kk.B::A::a << endl;

return 0;
}
//output:
//12
//12

环境:VS2005
但是我有个疑问为什么加上个构造函数 就会报错呢
liumingrong 2008-11-14
  • 打赏
  • 举报
回复
你的编译器是古董吗?
C c;
c.B::A::a = 1;
c.A::a = 2;
都可以
hhyttppd 2008-11-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lbh2001 的回复:]
试试
C/C++ code

kk.A::a


[/Quote]

仅有此法。
l176266956 2008-11-14
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
class A
{
public:int a;
};
class B:public A
{
public:int a;
};
class C:public B
{
public:int a;
};
int main()
{
C kk;
kk.A::a=1;
kk.B::a=2;
kk.a=3;
cout<<kk.A::a<<endl;
cout<<kk.B::a<<endl;
cout<<kk.a<<endl;
return 0;
}
Mougou 2008-11-14
  • 打赏
  • 举报
回复
A和B中的变量a被覆盖,无法访问。
lbh2001 2008-11-14
  • 打赏
  • 举报
回复
试试

kk.A::a

64,643

社区成员

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

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