不知道b的结果怎么是这样

hlong001 2005-03-12 04:28:29
我在学继承,以下是一个简单程序
#include<iostream.h>
class Base_T
{
protected:
int a;
public:
void seta(int sa)
{a=sa;}
};
class Derive1_T:private Base_T
{
protected:
int b;
public:
void setb(int sb)
{b=sb;}
};
class Derive2_T:public Derive1_T
{
int c;
public:
void setc(int sc)
{c=sc;}
void show()
{
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
}
};
void main()
{
Base_T op1;
op1.seta(1);
Derive1_T op2;
op2.setb(2);
Derive2_T op3;
op3.setc(3);
op3.show();
}
结果应该是b=2,c=3.可是输出c是对的,b怎么等于好大一个负数阿,请帮忙
...全文
167 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
reg9 2005-03-13
  • 打赏
  • 举报
回复
晕,居然把对象和类混在一起了,概念不清啊
CharlieBrown 2005-03-12
  • 打赏
  • 举报
回复
ob2和ob3的b是不一样D......
bluejugar 2005-03-12
  • 打赏
  • 举报
回复
cxc014说得不错.
Derive2_T的确是继承自Derive1_T,所以他也具有了一个protected成员变量b.既然他是属于op3.那自然就不能通过对对象op2的b赋值来改变了.
cxc014 2005-03-12
  • 打赏
  • 举报
回复
每个对象的非静态数据成员都是类中成员的一份拷贝
op2中有一个b,op3中有一个b,两不相关
hlong001 2005-03-12
  • 打赏
  • 举报
回复
Derive2_T不是公有继承了Derive1_T了么,那么函数setb也是Derive2_T的公有成员函数。对对象op2的b赋值难道不能让op3的show函数输出b=2值么?
langzi8818 2005-03-12
  • 打赏
  • 举报
回复
很正常 ~
因为你没有给b值,输出的是个随机
pipghost118 2005-03-12
  • 打赏
  • 举报
回复
void main()
{
Base_T op1;
op1.seta(1);
Derive1_T op2;
op2.setb(2);
Derive2_T op3;
op3.setc(3);
op3.show();
}

---->

{
...........
Derive2_T op3;
op3.setc(3);
op3.setb(2);
........
这样b才等于2

}

64,637

社区成员

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

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