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 문자열을 복사 합니다.

 

+ Recent posts