请教一个赋值符号重载的问题。
程序如下,在不修改已经存在的代码前提下,如何添加一个重载函数来实现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;
}
前提:不能修改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;
}
...全文
相关推荐
一元符号多项式的四则运算讲解.pdf
**赋值运算符重载Polynomial& operator = (const Polynomial &p1)**:这个函数用于实现对象间的复制,当一个多项式赋值给另一个多项式时,它会创建一个新的链表并复制原多项式的所有项
重载运算符 赋值运算符.cpp
在C++中,运算符重载的语法通常使用关键字“operator”后跟要重载的运算符符号。
C++运算符重载详解[项目代码]
默认情况下,C++为每个类提供了一个默认的拷贝赋值运算符,但当类中包含指针或动态分配的资源时,就需要手工编写拷贝赋值运算符以实现深拷贝,避免内存泄漏和悬挂指针的问题。
opreator-override.zip_override+c++_运算符重载
除了基本的二元运算符重载,C++还支持一元运算符(如`++`,`--`)以及赋值运算符(如`=`)的重载。需要注意的是,赋值运算符应遵循左值返回原则,并且通常需要处理自我赋值的情况,以避免潜在的问题。
C++重载运算符的几类使用方法.pdf
- `operator=`:赋值运算符重载确保正确地将一个`complex`对象的值复制到另一个对象,通常称为深拷贝,以避免浅拷贝可能引发的问题。 这种方式的优点在于语法上的简洁性。


