생성자는 그 클래스의 객체가 생성될 때
복사 생성자 역할
- 디폴트 복사 생성자는 static 멤버를 제외한 멤버들을 멤버별로 복사한다. 각 멤버는 값으로 복사된다.
- 멤버별 복사 또는 얕은 복사라고 부른다.
- 클래스가, 새로운 객체가 생성될 때마다 값이 변하는 static 데이터 멤버를 가지고 있다면,
그 상황을 처리하는 명시적 복사 생성자를 제공해야한다.
- 프로그램이 복사 생성자를(명시적or암시적) 사용하지 않으면,
컴파일러는 함수 정의가 아니라 원형만 제공한다.
복사 생성자 사용 하는 곳
- 새 객체를 동일한 클래스이 다른 객체로 초기화할 때
- 객체가 함수에 값으로 전달될 때
- 함수가 객체를 값으로 리턴할 때
- 컴파일러가 임시 객체를 생성할 때
디폴트 생성자
- 인수를 취하지 않는 생성자를 디폴트 생성자라고 부른다.
(초기화 값을 제공하지 않을 때 객체를 생성하는 생성자)
- 얕은 복사를 수행하게 된다.
- 어떤 멤버 변수의 값과 주소가 모두 같다는 의미
디폴트 복사 생성자
- 복사 생성자를 만들지 않는 경우 자동으로 생성, 호출되는 생성자
- 각 멤버 변수의 값을 복사하는 방식으로 생성된다.
먼저 생성자와 파괴자는 클래스를 설계할 때 사용한다.
생성자, 파괴자는 둘 다 표준 함수이다.
일반적으로 모든 객체는 그것을 생성할때 초기화하는 것이 바람직하다.
복사 생성자 ( = copy constructor )
복사 생성자 ( = copy constructor )는
다른 객체를 이용하여 같은 클래스의 객체를 초기화하는 것인 멤버 함수(= 메서드 ) 이다.
간단히 말하면, 이전에 생성된 동일한 클래스의 객체로 초기화하여
객체를 생성하는 생성자를 복사 생성자라고 한다.
복사 생성자의 특성
1. 복사 생성자는 기존 객체의 멤버를 복사하여 새로 생성된 객체의 멤버를 초기화하는 데 사용된다.
2. 복사 생성자는 인수와 동일한 클래스의 개체를 참조한다.
3, 이러한 객체의 멤버 초기화 과정을 통해 복사 생성자는 복사 초기화라는 것을 알수 있다.
( = 3. The process of initializing members of an object through a copy constructor is known as copy initialization. )
4. 이것은 또한 멤버의 광범위한 초기화라고 부른다. 왜냐하면 이 복사 생성자 초기화는
하나의 객체를 기존의 객체로 초기화하기 때문에,
둘 다 멤버별 복사본을 기준으로 동일한 클래스에 속한다.
5. 복사 생성자는 명시적으론 프로그래머에 의한 것이라고 정의할 수 있다.
만약 프로그래머가 복사 생성자를 정의하지 않는다면,
컴파일러는 우리를 위해 복사 생성자를 정의할 것이다.
// C++ program to demonstrate the working
// of a COPY CONSTRUCTOR
#include <iostream>
using namespace std;
class Point {
private:
int x, y;
public:
Point(int x1, int y1)
{
x = x1;
y = y1;
}
// Copy constructor
Point(const Point& p1)
{
x = p1.x;
y = p1.y;
}
int getX() { return x; }
int getY() { return y; }
};
int main()
{
Point p1(10, 15); // Normal constructor is called here
Point p2 = p1; // Copy constructor is called here
// Let us access values assigned by constructors
cout << "p1.x = " << p1.getX()
<< ", p1.y = " << p1.getY();
cout << "\np2.x = " << p2.getX()
<< ", p2.y = " << p2.getY();
return 0;
}
결과 값
p1.x = 10, p1.y = 15
p2.x = 10, p2.y = 15
복사 생성자의 유형
1. 디폴트 복사 생성자
2. 유저가 정의한 복사 생성자
이 두가지 이다.
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
클래스 (0) | 2023.02.05 |
---|---|
20230130 그간 배운 변수와 함수 상수 등 정리 (1) | 2023.02.05 |
사용자 정의 타입 (user-define data type) (0) | 2023.01.21 |
임시 변수, 참조 매개변수, const (0) | 2023.01.21 |
가변배열 동적할당 vector (0) | 2023.01.18 |