Minwoo Dev.

[C++] 윤성우의 열혈 C++ 프로그래밍 ch 07-2 : IS-A 관계의 상속 본문

C++

[C++] 윤성우의 열혈 C++ 프로그래밍 ch 07-2 : IS-A 관계의 상속

itisminu 2024. 4. 14. 18:17
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