상품과 할인 상품 – 상속 실습 [C++]

안녕하세요. 언제나 휴일에 언휴예요.

이번에는 상속 실습을 해 볼 거예요.

실습 소재는 상품과 할인 상품 클래스를 정의합니다.

상품과 할인 상품 클래스 다이어그램
상품과 할인 상품 클래스 다이어그램

클래스 다이어그램에서 삼각형과 실선으로 표현하는 관계를 일반화 관계라고 불러요.

일반화 관계는 기반 형식(Product)과 파생 형식(Discount Product) 사이의 관계입니다.

일반화 관계에서 파생 형식은 기반 형식의 멤버를 상속받는 특징을 갖습니다.

/* https://ehpub.co.kr
   C++ 예제 - 언제나 휴일
   상속 실습 - 상품과 할인 상품 클래스 정의하기
*/
#include 
#include 
using namespace std;
class Product
{
    string name;
    int price;
public:
    Product(string name, int price)
    {
        SetName(name);
        SetPrice(price);
    }
    virtual int GetPrice()const
    {
        return price;
    }
    string GetName()const
    {
        return name;
    }
    virtual void Print()const
    {
        cout << name << " 판매 가격:" << GetPrice() << endl;
    }
private:
    void SetPrice(int price)
    {
        this->price = price;
    }
    void SetName(string name)
    {
        this-> name = name;
    }
};

class DiscountProduct :public Product
{
    int discount;
public:
    DiscountProduct(string name, int price, int discount):Product(name,price)
    {
        SetDiscount(discount);
    }
    int GetDiscount()const
    {
        return discount;
    }
    virtual int GetPrice()const
    {
        int origin_price = Product::GetPrice();
        int dc = origin_price * discount / 100;
        return origin_price - dc;
    }
    virtual void Print()const
    {
        cout << "상품 가격:" << Product::GetPrice() << " 할인율:" << discount << " ";
        Product::Print();
    }
private:
    void SetDiscount(int discount)
    {
        this->discount = discount;
    }
};
int main()
{
    Product* p1 = new Product("치약", 3000);
    Product* p2 = new DiscountProduct("칫솔", 3000, 15);
    p1->Print();
    p2->Print();
    delete p1;
    delete p2;
    return 0;
}