郁闷了. 明明是 2 他就是要帮我输出 3

zhulinjia 2008-11-15 10:07:42
class INT32
{
private:
int INT;
friend ostream& operator << (ostream& out , INT32 a);

public:
INT32(INT32& a) {}
INT32(int a):INT(a) {}
INT32() {}
};
inline
ostream& operator << (ostream& out , INT32 a)
{
out << a.INT ;
return out;
}
int main()
{
INT32 a=2,b=3;
cout << a ; // 我监视过在输出的时候 a=3, 在输出后 a=2. 也就是说a只在输出时变过,之后又变回来了
system("pause");
}
...全文
106 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Longinc 2008-11-15
  • 打赏
  • 举报
回复
学习
lzr4304061988012 2008-11-15
  • 打赏
  • 举报
回复

INT32 a=2;//这句先调用INT32(int a)构造个临时对象,然后调用拷贝构造函数把这个临时对象作参数,
//默认的拷贝构造函数会初始化a::INT=2,但是现在你定义了后并没有初始化INT;所以INT是个垃圾值。


//这样也行
#include <iostream>

using namespace std;
class INT32
{
private:
int INT;
friend ostream& operator << (ostream& out , INT32 a);

public:
INT32(INT32& a):INT(a.INT) {}///这里拷贝构造函数要么用默认的,要么定义正确
INT32(int a):INT(a) { }
INT32() {}
};
inline
ostream& operator << (ostream& out , INT32 a)
{
out << a.INT ;
return out;
}
int main()
{
INT32 a=2,b=3;
cout << a ;
cout<<a;// 我监视过在输出的时候 a=3, 在输出后 a=2. 也就是说a只在输出时变过,之后又变回来了
system("pause");
}
zhulinjia 2008-11-15
  • 打赏
  • 举报
回复
解释一下吧
lzr4304061988012 2008-11-15
  • 打赏
  • 举报
回复

#include <iostream>

using namespace std;
class INT32
{
private:
int INT;
friend ostream& operator << (ostream& out , INT32 a);

public:
/*INT32(INT32& a) {}*///这里拷贝构造函数要么用默认的,要么定义正确
INT32(int a):INT(a) {}
INT32() {}
};
inline
ostream& operator << (ostream& out , INT32 a)
{
out << a.INT ;
return out;
}
int main()
{
INT32 a=2,b=3;
cout << a ;
cout<<a;// 我监视过在输出的时候 a=3, 在输出后 a=2. 也就是说a只在输出时变过,之后又变回来了
system("pause");
}

65,211

社区成员

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

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