본문 바로가기
대학/어서와 C++은 처음이지!

[어서와 C++은 처음이지!] chapter 04. 연습문제

by JJO.A 2022. 10. 9.

EXERCISE (p.208)

 

3. 직원을 나타내는 Employee 클래스를 다음의 단계에 따라서 작성하여 보자.

1.name, age, salary, years 등을 멤버 변수로 가지는 클래스를 정의한다.

2. 모든 멤버 변수를 private로 정의하고 접근자와 설정자를 제공하라.

3. Employee 클래스의 객제를 생성하고 설정자를 통하여 {“홍길동”, 26, 1000000,1}으로 설정하고 접근자를 이용하여서 멤버 변수의 값을 화면에 출력한다.

 

코드

#include<iostream>
using namespace std;

class Emplyee {	//1.클래스 정의
private:
	string name="";
	int age=0, salary=0, years=0;
public:
	//2.설정자(mutator):멤버 변수의 값을 설정
	void setEmplyee(string m_name, int m_age, int m_salary, int m_years) {
		name = m_name;
		age = m_age;
		salary = m_salary;
		years = m_years;
	}
	//2.접근자(accessor):멤버 변수의 값을 반환
	void getEmplyee() {
		cout << "이름: " << name << " 나이: " << age << " 급여: " << salary << " 연차: " << years;
	}
};
int main() {
	Emplyee obj_emplyee;	//3. 클래스의 객제 생성
	obj_emplyee.setEmplyee("홍길동", 26, 1000000, 1);	//3. 설정자를 통해 설정
	obj_emplyee.getEmplyee();	//3.접근자를 통해 값을 출력

	return 0;
}

 

실행화면

page208_num3

 


4. 다음의 은행업무를 기술한 문장을 읽고 클래스의 후보를 생각하여 보자.

 

[은행은 정기 예금과 보통 예금 업무를 제공한다. 고객들은 자신의 계좌에 돈을 입금할 수 있으며 계좌에서 돈을 인출할 수 있다. 그리고 각 계좌는 기간에 따라 이자를 지급한다. 계좌마다 이자는 달라진다.]

1. 이 문제 영역 기술 문서를 읽고 잠재적인 클래스 후보를 찾아보라. 참고로 업무 기술서의 문장에 등장하는 명사가 클래스의 후보가 된다.

-> 정기 예금, 보통 예금, 업무

2. 이 문제를 해결하는 데 필요한 클래스만을 선별하여 보자.

-> 정기 예금, 보통 예금

3. 각 클래스에 필요한 멤버 변수와 멤버 함수를 생각하여 보자.

-> 계좌, 이자

 


PROGRAMMING EXERCISE(p.210)

 

1. 사람을 나타내는 클래스 person을 작성한다. person은 이름(name), 나이(age),를 나타내는 변수를 가지고 있다. person은 정보를 설정하는 함수 sePerson(name, age)과 정보를 출력하는 함수 pring()도 가지고 있다. Person의 객체 obj를 생성하고 여기에 김철수”, 21을 저장해 보자

 

코드

#include<iostream>
using namespace std;

class Person {
	string name;
	int age;
public:
	//설정자
	void setPerson(string m_name, int m_age) {
		name = m_name;
		age = m_age;
	}
	//접근자
	void print() {
		cout << "이름 : " << name << endl;
		cout << "나이 : " << age << endl;
	}
};
int main() {
	Person obj;
	obj.setPerson("김철수", 21);
	obj.print();
}

 

실행화면

page210_num1

 


2. 컴퓨터를 나타내는 클래스 Computer을 작성한다. Computer는 이름(name), 메모리 용량(RAM), CPU속도(cpu_speed)를 나타내는 변수를 가지고 있다. Computer는 정보를 설정하는 함수 setComputer(name, RAM, cpu_speed)와 정보를 출력하는 함수 print()도 가지고 있다. Computer의 객체 obj를 생성하고 여기에 { “오피스컴퓨터”, 8, 4.2}를 저장해 보자. 

 

코드

#include<iostream>
using namespace std;

class Computer {
	string name;
	int RAM;
	double cpu_speed;
public:
	//설정자
	void setPerson(string m_name, int m_RAM, double m_cpu_speed) {
		name = m_name;
		RAM = m_RAM;
		cpu_speed = m_cpu_speed;
	}
	//접근자
	void print() {
		cout << "이름 : " << name << endl;
		cout << "RAM : " << RAM << endl;
		cout << "CPU 속도 : " << cpu_speed << endl;
	}
};
int main() {
	Computer obj;
	obj.setPerson("오피스컴퓨터", 8, 4.2);
	obj.print();
}

 

실행화면

pgae210_num2

 


3. 클래스 Sum을 작성한다. Sum 클래스는 정수형 변수 n1n2를 가진다. init(x,y) 멤버 함수에서 두 개의 정수를 받아서 n1n2에 저장한다. add()멤버 함수를 호출하면 (n1+n2)를 계산하여 반환한다. 클래스의 객체 obj를 생성하여서 다음과 같이 테스트 하라.

 

코드

#include<iostream>
using namespace std;

class Sum {
	int n1, n2;
public:
	//설정자
	void init(int x, int y) {
		n1 = x;
		n2 = y;
	}
	//접근자
	int add() {
		return n1 + n2;
	}
};
int main() {
	int input_x, input_y;
	cout << "첫 번째 정수 : ";
	cin >> input_x;
	cout << "두 번째 정수 : ";
	cin >> input_y;
	
	Sum obj;
	obj.init(input_x, input_y);
	
	cout << "연산 결과 : " << obj.add();

	return 0;
}

 

실행화면

page211_num3

 


4. 책을 나타내는 Book 클래스를 정의하여 보자. Book 클래스는 제목(title)과 저자(author)를 나타내는 멤버 변수를 가진다. 각 멤버 변수를 직접 접근하여서 제목에 “Great C++”를 대입하고 저자에 “Bob”을 대입하여 보자.

 

코드

#include<iostream>
using namespace std;

class Book {
public:
	string title, author;
};
int main() {
	Book obj;
	obj.title = "Great C++";
	obj.author = "Bob";

	cout << "책 이름: " << obj.title << endl;
	cout << "책 저자: " << obj.author;

}

 

실행화면

page211_num4

 


5. 주사위를 나타내는 클래스인 Dice를 작성하여 보자. Dice 클래스에 필요한 멤버 변수와 멤버 함수를 생각하여 보자. 멤버 함수에는 주사위를 굴리는 멤버 함수인 roll()을 포함하라. roll() 멤버 함수를 작성할 때 난수는 다음과 같이 생성할 수 있다.

[ face = (int) (rand()%6 +1 ) ]

Dice 객체를 생성하여서 테스트하라.

 

코드

#include<iostream>
#include <windows.h>
using namespace std;
class Dice {
	int face;

public:
	//설정자
	void setFace(int ran_face) {
		face = ran_face;
	}
	//접근자
	int print() {
		return face;
	}
};
int main() {
	for(int i=0;i<2;i++){
		srand((unsigned int)time(NULL));	//시드값을 시간으로 초기화
		int ran_face = (int)(rand() % 6 + 1);	//1~6까지의 값

		Dice obj;
		obj.setFace(ran_face);
		cout << "주사위 값 : " << obj.print() << endl;
		Sleep(1000);	//rand함수의 값이 같지 않도록 속도 조절
	}
}

 

실행화면

page211_num5

 


6. 직원을 나타내는 Employee 클래스를 작성하여 보자. 직원은 이름, 나이, 월급을 멤버 변수로 가지고 있다. Employee 객체를 생성하여서 다음과 같이 테스트하라.

 

코드

#include<iostream>
using namespace std;

class Employee {
public:
	string name;
	int age, salary;
};
int main() {
	Employee obj;
	obj.name = "김철수";
	obj.age = 38;
	obj.salary = 2000000;

	cout << "Employee1:" << endl;
	cout << obj.name << endl << obj.age << endl << obj.salary;

}

 

실행화면

page212_num7

 


8.복소수를 나타내는 Complex 클래스를 작성하라. 복소수는 실수부와 허수부로 이루어진다. 필요한 멤버 변수를 정의하라. 복소수를 5+3i와 같이 출려하는 pring() 멤버 함수를 정의하라. Complex 객체를 생성하여서 다음과 같이 테스트하라.

 

코드

#include<iostream>
using namespace std;

class Complex {
public:
	double r;
	double i;

	void print1() {
		cout << r << " + " << i << "i" << endl;
	}
	void print2() {
		cout << r << " - " << i << "i" << endl;
	}
};
int main() {
	Complex obj;

	obj.r = 5;
	obj.i = 3;
	obj.print1();

	obj.r = 3;
	obj.i = 4;
	obj.print2();
}

 

실행화면

page213_num8

 


9.삼각형을 나타내는 Triangle 클래스를 정의하여 보자. Triangle 클래스는 밑변과 높이, 면적을 나타내는 멤버 변수를 가진다. 삼각형의 면적을 구하는 멤버 함수 area()를 추가하라. Triangle 객체를 생성하여서 다음과 같이 테스트하라.

 

코드

#include<iostream>
using namespace std;

class Triangle {
	int b, h;

public:
	//설정자
	void setTriangle(int set_b, int set_h) {
		b = set_b;
		h = set_h;
	}
	//접근자
	double area() {
		double area = b * h / 2;
		return area;
	}
};
int main() {
	Triangle obj;
	obj.setTriangle(3, 4);
	cout << "밑변이 3이고 높이가 4인 삼각형의 면적 : " << obj.area();
}

 

실행화면

page213_num9

 


10. 은행 계좌를 나타내는 BankAccount 클래스를 작성해보자. BankAccount 크래스는 계좌 번호(number), 잔액(balance)을 멤버 변수로 가진다. 입금 함수 deposit(), 출금 함수withdraw()를 멤버 함수로 가진다. 객체를 생성하여서 다음과 같이 테스트하라.

 

코드

#include<iostream>
using namespace std;

class BankAccount {
	string number;
	int balance;
public:
	void init(string, int);
	void deposit(int amount);
	void withdraw(int amount);
};

void BankAccount::init(string set_num, int set_bal) {
	number = set_num;	//계좌 번호
	balance = set_bal;	//잔액
	cout << "현재 잔액 : " << set_bal << endl;
}
void BankAccount::deposit(int amount) {
	balance = balance + amount;
	cout << "after deposit(" << amount << ") ";
	init("100", balance);
}
void BankAccount::withdraw(int amount) {
	balance = balance - amount;
	cout << "after withdraw(" << amount << ") ";
	init("100", balance);
}
int main() {
	BankAccount obj;
	obj.init("100", 1000000);
	obj.deposit(1000000);
	obj.withdraw(1000000);
}

 

실행화면

page214_num10