-
명품 C++ 7장 1번 2번 3번 4번C++ 2018. 11. 3. 13:02
문제 1~4까지 사용될 Book 클래스는 다음과 같다.
#include <iostream>#include <string>using namespace std;class Book {string title;int price, pages;public:Book(string title = "", int price = 0, int pages = 0) {this->title = title; this->price = price; this->pages = pages;}void show() {cout << title << ' ' << price << "원" << pages << " 페이지" << endl;}string getTitle() { return title; }};1. Book 객체에 대해 다음 연산을 하고자 한다.
int main() {Book a("청춘", 20000, 300), b("미래", 30000, 500);a += 500; // 책 a의 가격 500원 증가b -= 500; // 책 b의 가격 500원 감소a.show();b.show();}1) +=,-= 연산자 함수를 Book 클래스의 멤버 함수로 구현하라.
소스코드
#include <iostream>#include <string>using namespace std;class Book {string title;int price, pages;public:Book(string title = "", int price = 0, int pages = 0) {this->title = title; this->price = price; this->pages = pages;}void show() {cout << title << ' ' << price << "원" << pages << " 페이지" << endl;}string getTitle() { return title; }Book& operator+=(int price);Book& operator-=(int price);};Book& Book::operator+=(int price) {this->price += price;return *this;}Book& Book::operator-=(int price) {this->price -= price;return *this;}int main() {Book a("청춘", 20000, 300), b("미래", 30000, 500);a += 500; // 책 a의 가격 500원 증가b -= 500; // 책 b의 가격 500원 감소a.show();b.show();}복사본을 리턴하지 않도록 객체의 참조를 리턴 시킵니다.
2) +=, -= 연산자 함수를 Book 클래스 외부 함수로 구현하라.
소스코드
#include <iostream>#include <string>using namespace std;class Book {string title;int price, pages;public:Book(string title = "", int price = 0, int pages = 0) {this->title = title; this->price = price; this->pages = pages;}void show() {cout << title << ' ' << price << "원" << pages << " 페이지" << endl;}string getTitle() { return title; }friend Book operator+=(Book& op2, int price);friend Book operator-=(Book& op2, int price);};Book operator+=(Book& op2, int price) {op2.price += price;return op2;}Book operator-=(Book &op2,int price) {op2.price -= price;return op2;}int main() {Book a("청춘", 20000, 300), b("미래", 30000, 500);a += 500; // 책 a의 가격 500원 증가b -= 500; // 책 b의 가격 500원 감소a.show();b.show();}값이 변경되 객체를 리턴하기 위해 참조에 의한 호출을 사용합니다.
실행결과
2. Book 객체를 활용하는 사례이다.
int main() {Book a("명품 C++", 30000, 500), b("고품 C++", 30000, 500);if (a == 30000) cout << "정가 30000원" << endl; // price 비교if (a == "명품 C++") cout << "명품 C++ 입니다." << endl; // 책 title 비교if (a == b)cout << "두 책이 같은 책입니다." << endl; // title, price, pages 모두 비교}1) 세 개의 == 연산자 함수를 가진 Book 클래스를 작성하라.
소스코드
#include <iostream>#include <string>using namespace std;class Book {string title;int price, pages;public:Book(string title = "", int price = 0, int pages = 0) {this->title = title; this->price = price; this->pages = pages;}void show() {cout << title << ' ' << price << "원" << pages << " 페이지" << endl;}string getTitle() { return title; }bool operator==(int price);bool operator==(string title);bool operator==(Book op2);};bool Book::operator==(int price) {if (this->price == price) return true;else return false;}bool Book::operator==(string title) {if (this->title == title) return true;else return false;}bool Book::operator==(Book op2) {if (this->price == op2.price&&this->title == op2.title&&this->pages == op2.pages) return true;else return false;}int main() {Book a("명품 C++", 30000, 500), b("고품 C++", 30000, 500);if (a == 30000) cout << "정가 30000원" << endl; // price 비교if (a == "명품 C++") cout << "명품 C++ 입니다." << endl; // 책 title 비교if (a == b)cout << "두 책이 같은 책입니다." << endl; // title, price, pages 모두 비교}비교 하는 연산자이기 때문에 bool을 리턴 타입으로 사용합니다.
2) 세 개의 == 연산자를 프렌드 함수로 작성하라.
소스코드
#include <iostream>#include <string>using namespace std;class Book {string title;int price, pages;public:Book(string title = "", int price = 0, int pages = 0) {this->title = title; this->price = price; this->pages = pages;}void show() {cout << title << ' ' << price << "원" << pages << " 페이지" << endl;}string getTitle() { return title; }friend bool operator==(Book op1,int price);friend bool operator==(Book op1, string title);friend bool operator==(Book op1, Book op2);};bool operator==(Book op1, int price) {if (op1.price == price) return true;else return false;}bool operator==(Book op1, string title) {if (op1.title == title) return true;else return false;}bool operator==(Book op1, Book op2) {if (op1.price == op2.price&&op1.title == op2.title&&op1.pages == op2.pages) return true;else return false;}int main() {Book a("명품 C++", 30000, 500), b("고품 C++", 30000, 500);if (a == 30000) cout << "정가 30000원" << endl; // price 비교if (a == "명품 C++") cout << "명품 C++ 입니다." << endl; // 책 title 비교if (a == b)cout << "두 책이 같은 책입니다." << endl; // title, price, pages 모두 비교}외부함수로 연산자 중복을 이용할때는 객체도 같이 넘겨줘야합니다.
실행결과
3. 다음 연산을 통해 공짜 책인지 판별하도록 ! 연산자를 작성하라.
int main() {Book book("벼룩시장", 0, 50); // 가격은 0if (!book) cout << "공짜다" << endl;}소스코드
#include <iostream>#include <string>using namespace std;class Book {string title;int price, pages;public:Book(string title = "", int price = 0, int pages = 0) {this->title = title; this->price = price; this->pages = pages;}void show() {cout << title << ' ' << price << "원" << pages << " 페이지" << endl;}string getTitle() { return title; }bool operator!();};bool Book::operator!() {if (this->price == 0) return true;else return false;}int main() {Book book("벼룩시장", 0, 50); // 가격은 0if (!book) cout << "공짜다" << endl;}실행결과
friend 를 사용한다면 객체를 넘겨줘야합니다.
4. 다음 연산을 통해 책의 제목을 사전 순으로 비교하고자 한다. < 연산자를 작성하라.
int main() {Book a("청춘", 20000, 300);string b;cout << "책 이름을 입력하세요>>";getline(cin, b); // 키보드로부터 문자열로 책 이름을 입력 받음if (b < a)cout << a.getTitle() << "이 " << b << "보다 뒤에 있구나!" << endl;}소스코드
#include <iostream>#include <string>using namespace std;class Book {string title;int price, pages;public:Book(string title = "", int price = 0, int pages = 0) {this->title = title; this->price = price; this->pages = pages;}void show() {cout << title << ' ' << price << "원" << pages << " 페이지" << endl;}string getTitle() { return title; }friend bool operator<(Book op1, Book op2);};bool operator<(Book op1, Book op2) {if (op1.title < op2.title) return true;else return false;}int main() {Book a("청춘", 20000, 300);string b;cout << "책 이름을 입력하세요>>";getline(cin, b); // 키보드로부터 문자열로 책 이름을 입력 받음if (b < a)cout << a.getTitle() << "이 " << b << "보다 뒤에 있구나!" << endl;}실행결과
friend 를 사용하지 않으려면 op1 을 빼면됩니다.
'C++' 카테고리의 다른 글
명품 C++ 7장 6번 (0) 2018.11.03 명품 C++ 7장 5번 (0) 2018.11.03 명품 C++ 6장 Open Challenge (0) 2018.11.02 명품 C++ 6장 9번 (0) 2018.11.02 명품 C++ 6장 8번 (2) 2018.11.02