문제
나는 당신이 그들 중 하나가 선언 될 때 서로 동등하게 두 개의 물체를 만들 수 있다는 것을 알고 있습니다. 나는 내 프로그램에서 이것을 테스트했다. 그러나 내가 과제 진술을 사용하러 갔을 때 그것은 놀라게되었습니다. 할당 문으로 두 개의 객체를 서로 동등하게 만들 수 있습니까? 아니면 한 개체가 선언 될 때만 그렇게 할 수 있습니까?
해결책
다른 개체의 내용을 복사 할 때 연산자 = 클래스에 제공합니다. 예를 들어:
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
}
다른 팁
해당 개체에 대한 과부하 할당 연산자가 도움이 될 수 있습니다. (같은 클래스의 대상에 대해 이야기하고 있기를 바랍니다 :))
할당 연산자의 경우 클래스 구현에 따라 과부하 할당 연산자입니다.
객체가 다른 객체에 의존 할 때 객체는 다른 객체를 초기화하거나 생성하거나 동일시해야 할 수 있습니다.
이 경우 복사 생성자는 최상의 솔루션을 제공합니다. 왜냐하면 다른 객체에 비트별로 객체를 복사하지 않기 때문입니다. 비트 타이어 복사는 메모리가 객체에 동적으로 할당되면 문제를 만듭니다. 따라서 솔루션은 클래스에서 COPY_CONSSSTOR를 정의하는 것입니다. 사본 구성자는 인수와 동일한 유형의 기존 객체를 참조하며 기존 객체에서 새 개체를 만드는 데 사용됩니다. 다음은 사본 생성자를 사용하여 객체를 다른 객체와 동일시하는 예입니다.
#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;
}
이 답변은 C#에 적용됩니다.
과부하 = 연산자와 함께 무시해야합니다 동등합니다 방법. 당신은 또한 확인해야합니다 가이드 라인 과부하의 경우 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);
}
}