-
명품 C++ 8장 Open ChallengeC++ 2018. 11. 4. 23:18
상속 관계의 클래스 작성
다음과 같은 상속 관계를 가진 Product, Book, CompactDisk, ConversationBook 클래스를 작성하고 아래 실행 화면과 같이 상품을 관리하는 프로그램을 작성하라.
Product 클래스는 상품의 식별자(id), 상품 설명, 생산자, 가격을 나타내는 정보를 포함한다. Book 클래스는 ISBN 번호, 저자, 책 제목 정보를 포함한다. CompactDisc 클래스는 앨범 제목, 가수 이름 정보를 포함한다. ConversationBook은 회화 책에서 다루는 언어 명 정보를 포함한다. 객체 지향 개념에 부합하도록 적절한 접근 지정자, 멤버 변수 및 함수, 생성자 등을 작성하라. main()에서는 최대 100개의 상품을 관리하며, 모든 상품의 정보를 조회할 수 있다. 상품의 식별자는 등록할 때 자동으로 붙인다.
소스코드
#include <iostream>#include <string>using namespace std;class Product {int id;string price,description, producer;public:Product(){}Product(int id, string price, string des, string pro) {this->id = id; this->price = price;description = des; producer = pro;}virtual void show() = 0; // 부모 클래스에서 자식 클래스의 함수를 접근하기위해// 순수 가상 함수 사용int getId() { return id; }string getPrice() { return price; }string getDes() { return description; }string getPro() { return producer; }};class Book : public Product {string isbn,author, bookName;public:Book(int id, string des, string pro, string price, string bookName, string author,string isbn) :Product(id, price, des, pro) {this->isbn=isbn; this->author = author; this->bookName = bookName;}void show();string getName() { return bookName; }string getAut() { return author; }string getISBN() { return isbn; }};void Book::show() {cout << "--- 상품ID : " << getId() << endl;cout << "상품설명 : " << getDes() << endl;cout << "생산자 : " << getPro() << endl;cout << "가격 : " << getPrice() << endl;cout << "책제목 : " << bookName << endl;cout << "저자 : " << author << endl;cout << "ISBN : " << isbn << endl;}class CompactDisc : public Product {string title, singer;public:CompactDisc(int id, string des, string pro, string price, string title, string singer) : Product(id,price,des,pro){this->title = title; this->singer = singer;}void show();};void CompactDisc::show() {cout << "--- 상품ID : " << getId() << endl;cout << "상품설명 : " << getDes() << endl;cout << "생산자 : " << getPro() << endl;cout << "가격 : " << getPrice() << endl;cout << "앨범제목 : " << title << endl;cout << "가수 : " << singer << endl;}class ConversationBook : public Book {string language;public:ConversationBook(int id, string des, string pro, string price, string bookName, string author,string lan,string isbn):Book(id, des, pro, price, bookName, author,isbn) {this->language = lan;}void show();};void ConversationBook::show() {cout << "--- 상품ID : " << getId() << endl;cout << "상품설명 : " << getDes() << endl;cout << "생산자 : " << getPro() << endl;cout << "가격 : " << getPrice() << endl;cout << "책제목 : " << getName() << endl;cout << "저자 : " << getAut() << endl;cout << "언어 : " << language << endl;cout << "ISBN : " << getISBN() << endl;}int main() {Product *p[100];int id = 0;string des, pro, price, isbn, aut, name, title, singer,lan;//설명,생산자,가격,isbn번호,작가,책이름,앨범제목,가수,언어cout << "***** 상품 관리 프로그램을 작동합니다 *****" << endl;for(;;) {cout << "상품 추가(1), 모든 상품 조회(2), 끝내기(3) ? ";int n;cin >> n;if (n == 1) {if (id >= 100) break;cout << "상품 종류 책(1), 음악CD(2), 회화책(3) ? ";cin >> n;cin.ignore(); // 해주지 않으면 버퍼 문제때문에 입력오류if (n == 1) {cout << "상품설명>>"; getline(cin, des);cout << "생산자>>"; getline(cin, pro);cout << "가격>>"; getline(cin, price);cout << "책제목>>"; getline(cin, name);cout << "저자>>"; getline(cin, aut);cout << "ISBN>>"; getline(cin, isbn);Book *b = new Book(id, des, pro, price, name, aut, isbn);p[id] = b;++id;}else if (n == 2) {cout << "상품설명>>"; getline(cin, des );cout << "생산자>>"; getline(cin, pro);cout << "가격>>"; getline(cin, price);cout << "앨범제목>>"; getline(cin, title);cout << "가수>>"; getline(cin, singer);CompactDisc* c=new CompactDisc(id, des, pro, price, title, singer);p[id] = c;++id;}else if (n == 3) {cout << "상품설명>>"; getline(cin, des);cout << "생산자>>"; getline(cin, pro);cout << "가격>>"; getline(cin, price);cout << "책제목>>"; getline(cin, name);cout << "저자>>"; getline(cin, aut);cout << "언어>>"; getline(cin, lan);cout << "ISBN>>"; getline(cin, isbn);ConversationBook *cb = new ConversationBook(id, des, pro, price, name, aut, lan, isbn);p[id] = cb;++id;}elsecout << "숫자 입력 오류" << endl;}else if (n == 2) {for (int i = 0; i < id; ++i)p[i]->show();}else if (n == 3) {break;}elsecout << "숫자 입력 오류" << endl;cout << endl;}}실행결과
입력시 버퍼문제로 인하여 cin.ingnore 함수로 버퍼를 제거해야합니다 관련 정보 : http://isntyet.tistory.com/72
순수 가상 함수를 사용하여
자식 클래스가 각각 다른 show()함수를 실행할 수 있게 하였습니다.
순수가상함수 정보 : http://www.qaupot.com/wordpress/?p=2435
'C++' 카테고리의 다른 글
명품 C++ 9장 3번 4번 (0) 2018.11.06 명품 C++ 9장 1번 2번 (0) 2018.11.06 명품 C++ 8장 9번 (5) 2018.11.04 명품 C++ 8장 8번 (0) 2018.11.04 명품 C++ 8장 7번 (0) 2018.11.04