수색…


통사론

  • 복사 생성자
  • MyClass (const MyClass & other);
  • MyClass (MyClass 및 기타);
  • MyClass (volatile const MyClass 및 기타);
  • MyClass (휘발성 MyClass 및 기타);
  • 지정 생성자
  • MyClass & 연산자 = (const MyClass & rhs);
  • MyClass & operator = (MyClass & rhs);
  • MyClass & operator = (MyClass rhs);
  • const MyClass & operator = (const MyClass & rhs);
  • const MyClass & operator = (MyClass & rhs);
  • const MyClass & operator = (MyClass rhs);
  • MyClass 연산자 = (const MyClass & rhs);
  • MyClass 연산자 = (MyClass & rhs);
  • MyClass 연산자 = (MyClass rhs);

매개 변수

rhs 오른손 쪽 복사 및 할당 생성자 모두에 대한 동등 함. 예를 들어 할당 생성자 : MyClass operator = (MyClass & rhs);
자리 표시 자 자리 표시 자

비고

추가 연구를위한 기타 좋은 자료 :

할당 연산자와 복사 생성자의 차이점은 무엇입니까?

대입 연산자와 복사 생성자 C ++

GeeksForGeeks

C ++ 기사

배정 연산자

할당 연산자는 이미 존재하는 (이전에 초기화 된) 객체를 다른 객체의 데이터로 대체 할 때 사용됩니다. 이를 예로 들어 보겠습니다.

// Assignment Operator
#include <iostream>
#include <string>

using std::cout;
using std::endl;

class Foo
{
  public:
    Foo(int data)
    {
        this->data = data;    
    }
    ~Foo(){};
    Foo& operator=(const Foo& rhs)
    {
            data = rhs.data; 
            return *this;
    }

    int data;
};

int main()
{
   Foo foo(2); //Foo(int data) called
   Foo foo2(42);
   foo = foo2; // Assignment Operator Called
   cout << foo.data << endl; //Prints 42
}

여기서 foo 객체를 이미 초기화했을 때 대입 연산자를 호출합니다. 그런 다음 나중에 foo2foo 할당합니다. 등호 연산자를 호출 할 때 나타나는 모든 변경 사항은 operator= 함수에 정의되어 있습니다. 다음에서 실행 가능한 출력을 볼 수 있습니다. http://cpp.sh/3qtbm

복사 생성자

한편, 복사 생성자는 할당 생성자와 완전히 반대입니다. 이번에는 이미 존재하지 않는 (또는 이전에 초기화되지 않은) 객체를 초기화하는 데 사용됩니다. 즉, 복사중인 객체를 실제로 초기화하지 않고 할당하려는 객체의 모든 데이터를 복사한다는 의미입니다. 이제 이전과 같은 코드를 살펴 보도록하겠습니다. 그러나 할당 생성자를 복사 생성자로 수정하십시오.

// Copy Constructor
#include <iostream>
#include <string>

using std::cout;
using std::endl;

class Foo
{
  public:
    Foo(int data)
    {
        this->data = data;    
    }
    ~Foo(){};
    Foo(const Foo& rhs)
    {
            data = rhs.data; 
    }

    int data;
};

int main()
{
   Foo foo(2); //Foo(int data) called
   Foo foo2 = foo; // Copy Constructor called
   cout << foo2.data << endl;
}

여기서 볼 수 있습니다 Foo foo2 = foo; 주요 함수에서 나는 객체를 실제로 초기화하기 전에 즉시 객체를 할당하는데, 이는 이전에 복사 생성자라는 것을 의미한다. 그리고 foo2 객체에 대한 매개 변수 int를 전달할 필요가 없다는 것을 알아 foo2 . 객체 foo에서 이전 데이터를 자동으로 가져 왔기 때문입니다. 다음은 예제 출력입니다. http://cpp.sh/5iu7

복사 생성자 대 할당 생성자

이제 우리는 복사 생성자와 할당 생성자가 위에 무엇인지 간단히 살펴보고 각각의 예제를 제공하여 두 코드가 동일한 코드에서 보도록하자. 이 코드는 위의 두 가지와 유사합니다. 이걸 가져 가자.

// Copy vs Assignment Constructor
#include <iostream>
#include <string>

using std::cout;
using std::endl;

class Foo
{
  public:
    Foo(int data)
    {
        this->data = data;    
    }
    ~Foo(){};
    Foo(const Foo& rhs)
    {
            data = rhs.data; 
    }

    Foo& operator=(const Foo& rhs)
    {
        data = rhs.data; 
        return *this;
    }

    int data;
};

int main()
{
   Foo foo(2); //Foo(int data) / Normal Constructor called
   Foo foo2 = foo; //Copy Constructor Called
   cout << foo2.data << endl;

   Foo foo3(42);
   foo3=foo; //Assignment Constructor Called
   cout << foo3.data << endl;
}

산출:

2
2

여기서 우리는 Foo foo2 = foo; 라인을 실행하여 복사 생성자를 먼저 호출하는 것을 볼 수 있습니다 Foo foo2 = foo; . 이전에 초기화하지 않았으므로 그리고 나서 우리는 foo3에 대한 대입 연산자를 이미 초기화 foo3=foo 때문에 호출합니다. foo3=foo ;



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow