같은 자료형의 변수들을 복사하는 것과 같이 객체도 서로 복사할 수 있습니다.
바로 대입연산자(=)와 복사생성자 두 가지의 이유로 복사할 수 있습니다.
- 대입연산자 이용
Point p(2,3), q;
q = p;
- 복사생성자 이용
- printPoint함수에서 매개변수로 객체를 전달하는 과정에 Point a가 p로 복사 생성자를 이용하여 객체 복사
- readPoint함수에서 Point p 함수를 반환하면서 복사 생성자를 이용하여 객체 복사
#include <iostream>
using namespace std;
struct Point {
int x, y;
Point(int xx = 0, int yy = 0) : x(xx), y(yy) { }
};
Point readPoint() {
Point p;
cout << "좌표를 입력해주세요(x,y): ";
cin >> p.x >> p.y;
return p;
}
void printPoint(Point p, char* str = "Point") {
cout << str << "= (" << p.x << "," << p.y << ")\n";
}
void main()
{
Point a;
a = readPoint();
printPoint(a, "입력 좌표");
}
복사 생성자(coppy constructor)는 다음과 같이 특정한 매개변수를 갖는 생성자를 부르는 말입니다.
클래스명( const 클래스명 & 참조객체명) { }
예: Point( const Point& p) : x(p.x), y(p.y) { } // 클래스 참조객체명 p를 매개변수로 받아 값을 초기화하는 함
복사 생성자가 호출되는 경우 3가지
- 다른 객체로부터 새로운 객체를 생성할 때
- 함수의 매개변수로 객체가 전달될 때
- 함수가 객체를 반환할 때
첫 번째는 그렇게 중요하지 않지만 2,3번은 중요합니다.
다행히 일반 생성자와 같이 사용자가 만들지 않아도 디폴트 복사 생성자가 알아서 만들어 제공해 줍니다.
'C++ 프로그래밍 > 클래스' 카테고리의 다른 글
함수의 설계와 객체의 복사 (0) | 2022.07.28 |
---|---|
얕은 복사와 깊은 복사 (0) | 2022.07.28 |
객체 생성되는 것과 안 되는 것 (0) | 2022.07.25 |
멤버 초기화 리스트 (0) | 2022.07.25 |
생성자와 멤버 함수의 유사점과 차이점 (0) | 2022.07.25 |