请教一个赋值符号重载的问题。

garry_zhang 2011-01-18 11:33:28
程序如下,在不修改已经存在的代码前提下,如何添加一个重载函数来实现main的功能。
前提:不能修改main,不能修改class已有成员,只能添加赋值重载函数来实现foo1=foo2; foo2=k;
陷阱就在于int& i_Value这个成员,是个引用。

#include <stdio.h>
class Foo
{
int& i_Value;

public:
Foo(int& v) : i_Value(v){}

~Foo(){}

void Increment() { ++i_Value; }
};

int main()
{
int i = 0;
int j = 1;
int k = 3;
Foo foo1(i);
Foo foo2(j);
foo1.Increment();
foo2.Increment();

printf("%d,%d,%d\n", i, j, k); // 必须显示 "1,2,3"

foo1 = foo2;
foo2 = k;
foo1.Increment();
foo2.Increment();

printf("%d,%d,%d\n", i, j, k); // 必须显示 "1,3,4"

return 0;
}
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
假老练 2011-09-24
  • 打赏
  • 举报
回复
假设有一个List链表类

已经定义好的拷贝构造函数List(const List &x); 深拷贝

那么我在重载=运算符的时候

是应该List& operator = (const List &x) { return List(x); }
还是应该List operator = (const List &x) { return List(x); }呢

比如List la,lb;
la.create(10);
lb=la;

这样lb是相当于指向了la那一链内存区还是相当于lb自己获得新的内存区呢?
elegant87 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

有引用意味着就不能重载operator=
[/Quote]
学习
引用必须要初始化的
在类中你没有初始化
不可用的
bluesky12312388 2011-01-18
  • 打赏
  • 举报
回复
  没法实现。

foo1 = foo2;
foo1中i_Value 指向 i
不管你怎么改最后的i不可能为1;
PS:有引用的时候不重载operator =
healer_kx 2011-01-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]

有引用意味着就不能重载operator=
[/Quote]
UP!
pengzhixi 2011-01-18
  • 打赏
  • 举报
回复
有引用意味着就不能重载operator=

64,637

社区成员

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

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