2009-09-14 77 views
2

我知道你可以使两个对象相等时,当其中一个正在申报。我在我的程序中测试了这个。但是当我去使用赋值语句时,它吓坏了。你能用一个赋值语句使两个对象相等吗?或者只有当一个对象被声明时才能这样做?使一个对象等于另一个对象

回答

7

你已经提供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 
} 
+1

但是你可以使用赋值(C = A)没有超载=操作 – 2009-09-14 08:50:02

+0

是的,这就是为什么我写了两个不同的语句 – Naveen 2009-09-14 08:54:03

+0

@艾哈迈德说:如果你没有明确定义一个,那么编译器自动为你生成一个。 – 2009-09-14 16:48:03

2

重载该对象的赋值运算符可以帮助您。 (我希望你在谈论同一类的对象:))

0

对于赋值运算符只是根据您的类实现的重载赋值运算符。

-1

此答案适用于C#。

随着Overloading =运算符,您还应该覆盖equals方法。您也应该检查Guidelines超载运输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); 
    } 
} 
+1

它被标记为C++,这肯定不是C++;) – Anteru 2009-09-14 12:50:26

+0

哎呀..没有注意到......感谢它品脱.. :) +1来点亮它。 :) – Mahin 2009-09-14 12:51:50

+0

品脱=点(在上面的评论):) – Mahin 2009-09-14 12:53:38

0

的对象可能需要初始化或创建或等同于另一个对象的时候,对象是依赖于其他对象。

在这种情况下,复制构造函数提供了最佳解决方案。因为它不会将对象逐个复制到其他对象。如果将内存动态分配给对象,则按位复制会产生问题。因此,解决方案是定义类中的copy_constructor。复制构造函数引用与其参数相同类型的现有对象,并用它从现有对象创建新对象。下面是一个examplet使用拷贝构造函数等同于其他对象的对象..

#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; 
} 
+0

一些如何,代码是不能逐行插入..我不知道 – Red 2009-09-15 00:12:30

相关问题