C++ 24.상속과 다형성 실습2(상품, 할인상품)

-상속과 다형성 실습2(상품, 할인상품)

시나리오

1. 상품

상품 이름과 가격을 멤버 필드로 갖습니다.

생성할 이름과 가격을 입력 인자로 받습니다.

가격과 이름의 접근자를 제공하며 가격 접근자는 가상 메서드 입니다.

상품 정보를 출력하는 가상 메서드를 제공합니다.

형식 내부에서만 접근 가능한 가격 설정자와 이름 절정자가 있습니다.

 

2. 할인상품

할인율을 멤버 필드로 갖습니다.

상품 이름과 가격, 할인율을 입력 인자로 받습니다.

가격 접근자와 상품 정보 출력하는 메소드를 재정의 합니다.

할인율의 접근자 메서드를 제공합니다.

형식 내부에서만 접근할 있는 할인율 설정자가 있습니다.

 

//DiscountProduct.h

#pragma once

#include "Product.h"

 

class DiscountProduct :public Product

{

                  int discount;

public:

                  DiscountProduct(string name, int price, int discount);

                  int GetDiscount();

                  int GetPrice();

                  void Print();

private:

                  void SetDiscount(int discount);

};

 

 

//DiscountProduct.cpp

#include "DiscountProduct.h"

#include "Product.h"

 

DiscountProduct::DiscountProduct(string name, int price, int discount) : Product(name,price)

{

                  SetDiscount(discount);           

}

int DiscountProduct::GetDiscount()

{

                  return discount;

}

int DiscountProduct::GetPrice()

{

                  int original = Product::GetPrice();

                  int discountGoods = original * discount/100;

                  return original-discountGoods;

}

void DiscountProduct::Print()

{

                  cout<<"상품 이름:"<<Product::GetName()<<endl;

                  cout<<"상품 가격:"<<Product::GetPrice()<<""<<endl;

                  cout<<"할인 :"<<GetDiscount()<<"%"<<endl;

                  Product::Print();

                  cout<<endl;

}

void DiscountProduct::SetDiscount(int discount)

{

                  this->discount = discount;

}

 

//Product.h

#pragma once

#include <iostream>

#include <string>

using namespace std;

 

class Product

{

                  string name;

                  int price;

public:

                  Product(string name, int price);

                  virtual int GetPrice();

                  string GetName();

                  virtual void Print();

private:

                  void SetPrice(int price);

                  void SetName(string name);

};

 

 

//Product.cpp

#include "Product.h"

 

Product::Product(string name, int price)

{

                  SetPrice(price);

                  SetName(name);

}

int Product::GetPrice()

{

                  return this->price;

}

string Product::GetName()

{

                  return this->name;

}

void Product::Print()

{

                  cout<<name<<" 판매가격: "<<GetPrice()<<""<<endl;

}

void Product::SetPrice(int price)

{

                  this->price = price;

}

void Product::SetName(string name)

{

                  this->name = name;

}

 

 

//Program.cpp

#include "Product.h"

#include "DiscountProduct.h"

 

int main(void)

{

                  Product *p1 = new Product("치약",3000);

                  Product *p2 = new DiscountProduct("칫솔",3000,15);

                  Product *p3 = new Product("콘푸로스트",12900);

                  Product *p4 = new DiscountProduct("우유",5000,20);

                  Product *p5 = new Product("컴퓨터",200000);

                  Product *p6 = new DiscountProduct("마우스",50000,23);

 

                  p1->Print();

                  p2->Print();

                  p3->Print();

                  p4->Print();

                  p5->Print();

                  p6->Print();

 

                  delete p1;

                  delete p2;

                  delete p3;

                  delete p4;

                  delete p5;

                  delete p6;

 

                  return 0;

}

 

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY