0. 용어 지도


1. Defining Abstract Data Types (ADT 정의)

1.1 Sales_data 기본 인터페이스

핵심 규칙

예제

struct Sales_data {
    // 공개 인터페이스
    std::string isbn() const { return bookNo; }               // inline + const 멤버
    Sales_data& combine(const Sales_data& rhs) {
        units_sold += rhs.units_sold;
        revenue += rhs.revenue;
        return *this;                                         // this 반환으로 체이닝
    }
    double avg_price() const {
        return units_sold ? revenue / units_sold : 0;
    }

    // 데이터
    std::string bookNo;
    unsigned units_sold = 0;      // in-class initializer(C++11)
    double revenue = 0.0;         // in-class initializer(C++11)
};

// 논멤버(보통 friend)
std::istream& read(std::istream& is, Sales_data& item) {
    double price = 0;
    is >> item.bookNo >> item.units_sold >> price;
    item.revenue = item.units_sold * price;
    return is;
}
std::ostream& print(std::ostream& os, const Sales_data& item) {
    os << item.isbn() << " " << item.units_sold << " " << item.avg_price();
    return os;
}
Sales_data add(const Sales_data& lhs, const Sales_data& rhs) {
    Sales_data sum = lhs;  // 복사
    sum.combine(rhs);
    return sum;            // RVO
}

암기: “클래스 내부는 선언만 맞으면 순서 무관, 함수 본체는 나중에 컴파일.”


1.2 thisconst 멤버 함수

std::string isbn() const { return this->bookNo; }  // this는 const 포인터