0.&other
복사 생성자와 대입 연산자에서 사용되는 매개변수로, 복사할 원본 객체의 참조를 가리킵니다.
이는 복사 생성자와 대입 연산자가 복사할 때 원본 객체를 직접 수정하지 않도록 보장합니다.
1.복사 생성자 (Copy Constructor)
객체를 새로 생성할 때 기존 객체로부터 복사하여 초기화하는 데 사용됩니다. 객체가 복사될 때 호출됩니다.
#include <iostream>
class Example {
private:
int* data;
public:
// 생성자
Example(int value) : data(new int(value)) {
std::cout << "Constructor called" << std::endl;
}
// 복사 생성자
Example(const Example& other) : data(new int(*other.data)) {
std::cout << "Copy Constructor called" << std::endl;
}
// 소멸자
~Example() {
delete data;
std::cout << "Destructor called" << std::endl;
}
void print() const {
std::cout << "Data: " << *data << std::endl;
}
};
int main() {
Example obj1(10);
Example obj2 = obj1; // 복사 생성자 호출
obj1.print();
obj2.print();
return 0;
}
2. 대입 연산자 (Assignment Operator)
이미 존재하는 객체에 다른 객체의 값을 대입할 때 사용됩니다.
#include <iostream>
class Example {
private:
int* data;
public:
// 생성자
Example(int value) : data(new int(value)) {
std::cout << "Constructor called" << std::endl;
}
// 복사 생성자
Example(const Example& other) : data(new int(*other.data)) {
std::cout << "Copy Constructor called" << std::endl;
}
// 대입 연산자
Example& operator=(const Example& other) {
if (this != &other) {
delete data; // 기존 데이터 삭제
data = new int(*other.data); // 새로운 데이터 복사
}
std::cout << "Assignment Operator called" << std::endl;
return *this;
}
// 소멸자
~Example() {
delete data;
std::cout << "Destructor called" << std::endl;
}
void print() const {
std::cout << "Data: " << *data << std::endl;
}
};
int main() {
Example obj1(10);
Example obj2(20);
obj2 = obj1; // 대입 연산자 호출
obj1.print();
obj2.print();
return 0;
}
'Language > C++' 카테고리의 다른 글
[C++] 표준 라이브러리 (STL) (0) | 2024.08.04 |
---|---|
[C++] 연산자 오버로딩 (0) | 2024.08.04 |
[C++] 상속 (0) | 2024.08.02 |