직접 복사 함수를 정의할 때의 문제

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; // 🔹 새로운 멤버 추가
};

상속에서의 문제

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;
}
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