문제

나는 당신이 그들 중 하나가 선언 될 때 서로 동등하게 두 개의 물체를 만들 수 있다는 것을 알고 있습니다. 나는 내 프로그램에서 이것을 테스트했다. 그러나 내가 과제 진술을 사용하러 갔을 때 그것은 놀라게되었습니다. 할당 문으로 두 개의 객체를 서로 동등하게 만들 수 있습니까? 아니면 한 개체가 선언 될 때만 그렇게 할 수 있습니까?

도움이 되었습니까?

해결책

다른 개체의 내용을 복사 할 때 연산자 = 클래스에 제공합니다. 예를 들어:

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);
   }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top