1. 문제
8. 책의 이름과 가격을 저장하는 다음 Book 클래스에 대해 물음에 답하여라.
(1) Book 클래스의 생성자, 소멸자, set() 함수를 구현하라.
(2) 컴파일러가 삽입하는 디폴트 복사 생성자 코드는 무엇인가?
(3) 디폴트 복사 생성자만 있을 때 아래 main() 함수는 실행 오류가 발생한다.
다음과 같이 실행 오류가 발생하지 않도록 깊은 복사 생성자를 작성하라.
2. 결과
3. 코드
#include <iostream>
#include <string>
using namespace std;
class Book {
string s;
int price;
public:
Book(string s, int price);
~Book();
/* 디폴트 복사 생성자
Book(Book& b) {
this->title = title;
thie->price = price;
}
*/
Book(Book &b);
void set(string s, int price);
void show() {
cout << s << ' ' << price << "원" << endl; }
};
Book::Book(string s, int price) {
this->s = s;
this->price = price;
}
Book::~Book() {
}
void Book::set(string s, int price) {
this->s = s;
this->price = price;
}
Book::Book(Book &b) {
this->s = b.s;
this->price = b.price;
}
int main() {
Book cpp("명품C++", 10000);
Book java = cpp;
java.set("명품자바", 12000);
cpp.show();
java.show();
}
4. 설명
디폴트 복사 생성자는 주석처리로 했습니다.
디폴트 복사 생성자는 얕은 복사로 오류가 많이 발생하니 깊은 복사를 사용하시는 것이 좋습니다.
strlen()함수는 C-string 문자열의 길이를 return 합니다
strcpy 함수는 C-string 문자열을 복사 합니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 6장 1번 - (1) (0) | 2019.04.12 |
---|---|
명품 C++ programming 5장 Open Challenge (0) | 2019.04.07 |
명품 C++ programming 실습문제 5장 7번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 5장 6번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 5장 5번 (0) | 2019.04.07 |