C++/열혈 C++ 프로그래밍(윤성우 저)

열혈 C++ 프로그래밍 7-2 문제

꾸준함. 2017. 6. 5. 13:49

[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 <iostream>

using namespace std;

 

class Rectangle

{

private:

        int row;

        int column;

public:

        Rectangle(int length1, int length2) :row(length1), column(length2)

        {

        }

        void ShowAreaInfo()

        {

               cout << "면적: " << row*column << endl;

        }

};

 

//딱히 다른 변수가 필요없으므로 private 선언할 변수 X

class Square :public Rectangle

{

public:

        Square(int num) :Rectangle(num, num)

        {

        }

};

 

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 <iostream>

#include <cstring>

using namespace std;

 

class Book

{

private:

        char *title; //책의 제목

        char *isbn; //국제표준도서번호

        int price; //책의 정가

public:

        Book(char *booktitle, char *bookisbn, int bookprice) :price(bookprice)

        {

               title = new char[strlen(booktitle) + 1];

               strcpy(title, booktitle);

               isbn = new char[strlen(bookisbn) + 1];

               strcpy(isbn, bookisbn);

        }

        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 *booktitle, char *bookisbn, int bookprice, char *key) :Book(booktitle, bookisbn, bookprice)

        {

               DRMKey = new char[strlen(key) + 1];

               strcpy(DRMKey, 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;

}



개발 환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


[참고] 열혈 C++ 프로그래밍 윤성우 저

반응형