[C++ 언어-막코딩] 13장 복사생성자

Words
214
Reading
1 min
Listen
Play
7y

[C++ 언어-막코딩] 13장 복사생성자



오늘의 주제는 복사 생성자입니다. 간단히 정의를 내리자면 자기자신과 같은 형태의 객체를 인자로 받는 생성자함수를 말합니다. 그럼 복사생성자가 어떻게 사용하는지 알아 볼까요.

1. 복사생성자 함수


class AAA{
private:
   int a;
public:
   AAA(){
      a=10;
   }
   AAA(int x){
      a=x;
   }
   AAA(AAA& op){ //복사생성자
      a=op.x;
   }
}

위와 같이 생성자 함수인데 생성자 함수 인자가 자기자신과 같은 객체를 인자로 받은 형태를 말합니다.

AAA op1(20);
AAA op2(op1);

이렇게 op1객체가 선언되고 난뒤에 op2가 선언할 때 op1을 인자로 넘겨줍니다. 여기에서 op1의 a가 20인 값을 갖고 그 값이 op2에 넘겨주게 됩니다.

2. 복사생성자 표현


두가지 형태로 사람들이 표현하는데 위 코딩처럼 표현해도 되지만 아래와 같이 고정시켜 표현하기도 합니다.

AAA(const AAA &op){
    a=op.a;
}

이 경우는 변경 안되게 고정화 시킵니다.

다른 방법으로는

explicit AAA(const AAA &op){
    a=op.a;
}

로 컴파일러가 들어오는 인자를 알아서 타입에 맞게 맞춰줍니다. 선택은 자유이고요.

3. 코딩


디폴트 생성자 함수와 인자가 있는 생성자 함수와 복사 생성자 함수의 결과를 실행 시켜 봅시다.

[전체소스]

#include 
using namespace std;

class AAA {
private:
    int a;
public:
    AAA(){
        a=10;
        cout<<"생성자1"<<endl;
    }
    AAA(int x){
        a=x;
        cout<<"생성자2"<<endl;
    }
    explicit AAA(AAA &op){
        a=op.a;
        cout<<"복사생성자"<<endl;
    }
    void output(){
        cout<<"a = "<<a<<endl;
    }   
};

int main(int argc, char** argv) {
    AAA op1;
    AAA op2(30);    
    AAA op3(op2);
    
    op1.output();
    op2.output();   
    op3.output();
    
    return 0;
}

디폴트 인자가 없는 그냥 객체를 선언 할때와 인자가 있을 때 객체를 선언하는 것을 출력해보고 마지막으로 오늘 주제인 객체 인자를 던저 복사생성자를 출력해보는 실습을 해보았네요.

[결과]
a1.jpg

세가지 결과가 정상적으로 출력 되었죠. 호출이 어떻게 되고 그 겨로가가 어떻게 나오는지 확인하여 원리를 이해하시기 바랍니다.

마무리


복사 생성작 같은 경우는 그렇게까지 많이 사용하지는 않습니다. 굳이 인자를 던저 값을 등록하는 방식을 취하지 이미 객체가 선언된 것을 객체 인자로 다시 던져주어 새로운 객체에 복사하는 경우는 드물 것 같네요. 그냥 이런게 있다는 것만 이해하시면 될 듯 싶네요.


Sponsored ( Powered by dclick )

dclick-imagead