void logCall(const std::string& funcName); // 로그 기록 함수
class Customer {
public:
Customer(const Customer& rhs); // 복사 생성자
Customer& operator=(const Customer& rhs); // 복사 대입 연산자
private:
std::string name; // 고객 이름
};
---------------------------------
Customer::Customer(const Customer& rhs)
: name(rhs.name) // rhs의 데이터를 복사
{
logCall("Customer copy constructor");
}
Customer& Customer::operator=(const Customer& rhs)
{
logCall("Customer copy assignment operator");
name = rhs.name; // rhs의 데이터를 복사
return *this;
}
class Date { ... }; // 날짜 정보를 저장하는 클래스
class Customer {
public:
// 이전과 동일
private:
std::string name;
Date lastTransaction; // 🔹 새로운 멤버 추가
};
lastTransaction을 복사하지 않음.lastTransaction이 초기화되지 않거나, 엉뚱한 값이 들어갈 수 있음.class PriorityCustomer : public Customer { // 우선 고객 (상속 클래스)
public:
PriorityCustomer(const PriorityCustomer& rhs);
PriorityCustomer& operator=(const PriorityCustomer& rhs);
private:
int priority; // 우선순위
};
-----------------------------------
PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs)
: priority(rhs.priority)
{
logCall("PriorityCustomer copy constructor");
}
PriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer& rhs)
{
logCall("PriorityCustomer copy assignment operator");
priority = rhs.priority;
return *this;
}
Customer 부분을 명시적으로 복사하지 않으면, 기본 생성자가 호출되어 초기화 됨.
Customer() 기본 생성자가 존재하면 실행PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs)
: Customer(rhs), //부모 클래스의 복사 생성자 호출
priority(rhs.priority)
{
logCall("PriorityCustomer copy constructor");
}
PriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer& rhs)
{
logCall("PriorityCustomer copy assignment operator");
Customer::operator=(rhs); // 부모 클래스의 대입 연산자 호출
priority = rhs.priority;
return *this;
}
💫Things to Remember