27. [C++] 상속을 위한 조건
2024. 4. 15. 16:56ㆍ[C++]/C++ 언어 기초
07-2 [IS-A] 관계의 상속 실습 문제
문제 1. 정사각형을 의미하는 Square 클래스와 직사각형을 의미하는 Rectangle 클래스를 정의하고자 한다.
그런데 정사각형은 직사각형의 일종이므로, 다음의 형태로 클래스의 상속관계를 구성하고자 한다
class Rectangle
{
};
class Square :public Rectangle
{
};
이에 다음 main 함수와 함께 실행이 가능하도록 위의 클래스를 완성해보자
int main(void)
{
Rectangle rec(4, 3);
rec.ShowAreaInfo();
Square sqr(7);
sqr.ShowAreaInfo();
return 0;
}
내 풀이
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
class Rectangle
{
private:
int width;
int height;
public:
Rectangle (int wid, int hei):width(wid), height(hei){}
void ShowAreaInfo(){
cout<<"면적: "<<width*height<<endl;
}
};
class Square :public Rectangle
{
public:
Square(int size):Rectangle(size, size){}
};
int main(void)
{
Rectangle rec(4, 3);
rec.ShowAreaInfo();
Square sqr(7);
sqr.ShowAreaInfo();
return 0;
}
문제 2. 책을 의미하는 Book 클래스와 '전자 책'을 의미하는 Ebook 클래스를 정의하고자 한다. 그런데 '전자 책'도 '책'의 일종이므로, 다음의 형태로 클래스의 상속관계를 구성하고자 한다 (클래스에 선언되어야 할 멤버변수만 제시하였다)
class Book
{
private:
char *title; //책의 제목
char *isbn; //국제표준도서번호
int price; //책의 정가
};
class Ebook :public Book
{
private:
char *DRMKey; //보안관련 키
};
위의 EBook 클래스에 선언된 멤버 DRMKey는 전자 책에 삽입이 되는 보안관련 키(key)의 정보를 의미한다.
그럼 다음 main 함수와 함께 실행이 가능하도록 위의 클래스를 완성해보자
int main(void)
{
Book book("좋은 C++", "555-12345-890-0", 20000);
book.ShowBookInfo();
cout << endl;
Ebook ebook("좋은 C++ ebook", "555-12345-890-1", 10000, "fdx9w0i8kiw");
ebook.ShowEBookInfo();
return 0;
}
내 코드
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
class Book
{
private:
char *title; //책의 제목
char *isbn; //국제표준도서번호
int price; //책의 정가
public:
Book(char *tit, char *isb, int pri):price(pri){
title = new char[strlen(tit)+1];
isbn = new char[strlen(isb)+1];
strcpy(title, tit);
strcpy(isbn, isb);
}
void ShowBookInfo(){
cout<<"제목: "<<title<<endl;
cout<<"ISBN: "<<isbn<<endl;
cout<<"가격: "<<price<<endl;
}
~Book(){
delete []title;
delete []isbn;
}
};
class Ebook :public Book
{
private:
char *DRMKey; //보안관련 키
public:
Ebook(char *tit, char * isb, int pri, char *key):Book(tit, isb, pri){
DRMKey = new char[strlen(key)+1];
strcpy_s(DRMKey, strlen(key)+1, key);
}
void ShowEBookInfo(){
ShowBookInfo();
cout<<"인증키: "<<DRMKey<<endl;
}
~Ebook(){
delete []DRMKey;
}
};
int main(void)
{
Book book("좋은 C++", "555-12345-890-0", 20000);
book.ShowBookInfo();
cout << endl;
Ebook ebook("좋은 C++ ebook", "555-12345-890-1", 10000, "fdx9w0i8kiw");
ebook.ShowEBookInfo();
return 0;
}
반응형
'[C++] > C++ 언어 기초' 카테고리의 다른 글
28. [C++] 객체 포인터의 참조 관계 (0) | 2024.04.16 |
---|---|
은행계좌프로그램 실습 5단계 (0) | 2024.04.16 |
25. [C++] 상속의 문법적인 이해 (0) | 2024.04.15 |
은행계좌프로그램 실습 4단계 (0) | 2024.04.15 |
은행계좌프로그램 실습 3단계 (0) | 2024.04.15 |