我知道当声明其中一个对象时,您可以使两个对象彼此相等。我在我的程序中对此进行了测试。但是当我去使用赋值语句时,它吓坏了。您可以使用赋值语句使两个对象彼此相等,还是只能在声明一个对象时才这样做?
问问题
24684 次
5 回答
8
您已将 operator= 提供给一个类,以便复制另一个对象的内容。例如:
class A
{
public:
//Default constructor
A();
//Copy constructor
A(const A&);
//Assignment operator
A& operator=(const A& a);
};
int main()
{
A a; //Invokes default constructor
A b(a); //Invokes copy constructor;
A c;
c = a; //Invokes assignment operator
}
于 2009-09-14T08:43:27.350 回答
2
重载该对象的赋值运算符可以帮助您。(我希望你说的是同一类的对象:))
于 2009-09-14T08:39:24.973 回答
0
对于赋值运算符,只需根据您的类实现重载赋值运算符。
于 2009-09-14T12:29:20.000 回答
0
当对象依赖于其他对象时,该对象可能需要初始化或创建或等同于另一个对象。
在这种情况下,复制构造函数给出了最好的解决方案..因为它不会将对象逐位复制到其他对象。如果内存是动态分配给对象的,则按位复制会产生问题。所以,解决方案是在类中定义copy_constructor。复制构造函数引用一个与它的参数相同类型的现有对象,它用于从现有对象创建一个新对象。这是使用复制构造函数将对象与其他对象等同的示例。
#include "stdafx.h"
#include "iostream"
using namespace std;
class array
{
int *ptr;
int size;
public:
array (int sz) {
ptr = new int [sz];
size =sz;
for(int index=0;index<size;index++)
ptr[index]=size;
}
~array(){
delete[] ptr;
}
array(array &a) {
int index;
ptr=new int[a.size];
for(index=0;index<a.size;index++)
ptr[index]=a.ptr[index];
cout<<"copy_constructor invoked"<<endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
array num(10);
array x(num); //invokes copy_constructor
array y=num; //invokes copy consturctor
return 0;
}
于 2009-09-15T00:10:30.123 回答
-1
这个答案适用于 C#。
除了重载 = 运算符,您还应该覆盖equals方法。您还应该检查重载 Equals() 和运算符 == 的指南
public struct Complex
{
double re, im;
public override bool Equals(Object obj)
{
return obj is Complex && this == (Complex)obj;
}
public override int GetHashCode()
{
return re.GetHashCode() ^ im.GetHashCode();
}
public static bool operator ==(Complex x, Complex y)
{
return x.re == y.re && x.im == y.im;
}
public static bool operator !=(Complex x, Complex y)
{
return !(x == y);
}
}
于 2009-09-14T12:39:59.857 回答