미누에요
[C++] 윤성우의 열혈 C++ 프로그래밍 ch 07-2 : IS-A 관계의 상속 본문
728x90
반응형
SMALL
문제 1
정사각형을 의미하는 Square 클래스와 직사각형을 의미하는 Rectangle 클래스를 정의하고자 한다. 그런데 정사각형은 직사각형의 일종이므로, 다음의 형태로 클래스의 상속관계를 구성하고자 한다.
class Rectangle{
....
};
class Square : public Rectangle{
....
};
이에 다음 main 함수와 함께 실행이 가능하도록 위의 클래스를 완성해보자. 참고로 상속을 한다고 해서 유도 클래스에 무엇인가를 많이 담아야 한다는 생각을 버리자.
[main 함수]
int main(void)
{
Rectangle rec(4,3);
rec.ShowAreaInfo();
Square sqr(7);
sqr.ShowAreaInfo();
return 0;
}
실행의 예
면적 : 12
면적 : 49
정답
#include <iostream>
using namespace std;
typedef struct Point
{
int xpos;
int ypos;
} Point;
class Rectangle
{
private:
int wid;
int hei;
int area;
public:
Rectangle(int wide, int height) : wid(wide), hei(height)
{
area = wid * hei;
}
void ShowAreaInfo()
{
cout << "면적 : " << area << endl;
}
};
class Square : public Rectangle
{
public:
Square(int side) : Rectangle(side, side)
{
}
};
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 함수와 함께 실행이 가능하도록 위의 클래스를 완성해보자.
[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;
}
실행의 예
제목 : 좋은 C++
ISBN : 555-12345-890-0
가격 : 20000
제목 : 좋은 C++ ebook
ISBN : 555-12345-890-1
가격 : 10000
인증키 : fdx9w0i8kiw
정답
#include <iostream>
using namespace std;
class Book
{
private:
char *title;
char *isbn;
int price;
public:
Book(char *Title, char *Isbn, int Price) : price(Price)
{
title = new char[strlen(Title) + 1];
isbn = new char[strlen(Isbn) + 1];
strcpy(title, Title);
strcpy(isbn, Isbn);
}
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 *Title, char *Isbn, int Price, char *Drmkey) : Book(Title, Isbn, Price)
{
DRMKey = new char[strlen(Drmkey) + 1];
strcpy(DRMKey, Drmkey);
}
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;
}
실행 결과
728x90
반응형
LIST
'C++' 카테고리의 다른 글
[C++] 윤성우의 열혈 C++ 10-1 두 가지 방법의 연산자 오버로딩 문제풀이 (0) | 2024.05.11 |
---|---|
[C++] 윤성우의 열혈 C++ 08-1 상속 관계의 확장과 추상 클래스 문제풀이 (0) | 2024.05.03 |
[C++] 윤성우의 열혈 C++ 프로그래밍 ch 07-1 : 상속과 생성자의 호출 문제풀이 (0) | 2024.04.14 |
[C++] this 포인터 (0) | 2024.03.25 |
[C++] 객체 배열, 객체 포인터 배열 (0) | 2024.03.25 |