3장 연습문제
<이론문제>
1.
객체의 구성요소를 감싸서 보호하고 볼 수 없게 하기 위해
2.
③
3.
멤버변수가 public으로 선언되어 누구나 접근 가능하기 때문에 캡슐화 x
4.
class Person(){
int age;
public:
void older() {
age++;
}
};
5.
접근지정자의 디폴트가 private 이므로 외부에서 사용이 불가하다. & 마지막 세미콜론
class Circle {
int radius;
public:
double getArea();
};
6.
생성자에 리턴타입을 선언할 수 없다.
class Tower{
int height = 20;
public:
Tower(){
height = 10;
};
7.
매개변수가 있는 생성자를 선언하였으므로 main함수에서 기본 생성자를 호출할수 없다.
class Building {
private:
int floor;
public:
Building(int s){
floor = s;
}
};
int main(){
//Building twin, star;
Building BlueHouse(5), JangMi(14);
}
8.
class Calendar {
private:
int year;
public:
Calendar();
int getYear();
}
Calendar::Calendar(){
year = 10;
}
int Calendar::getYear() {
return year;
}
9.
② 중복 생성 가능하다
10.
③ 소멸자에는 매개변수 없다.
11.
1, 2)
House::House(int n, ins s) {
numOfRooms = n;
size = s;
cout << n << s;
}
House::~House(int n, ins s) {
cout << n << s;
}
3)
생성과 반대..
생성 : b-> c-> a -> d
소멸 : d-> a-> c-> b
12.
c -> b -> a 생성 순서
a -> b -> c 소멸 순서
13. ★
기본 생성자를 public으로 선언하지 않았으므로 멤버 변수에 직접적으로 접근이 불가능하다.
-> 생성자를 public으로 선언한다.
14.
멤버 변수를 private로 선언했으므로 외부에서 접근하려고 해서 오류가 난다.
-> 멤버 변수를 public으로 선언한다. or 매개변수로 호출한다.
15.
TV(), TV(int a)
16. ②
오버헤드가 없어서 실행 속도가 향상된다.
17. ①
크기가 작은 함수의 경우 효과적이다.
18. ①
컴파일러에 따라 재귀, static변수, 반복문, switch문, goto 문등을 가진 함수는 인라인으로 허용 안한다.
19. ④
상속을 지원한다.
20.
class Family {
private:
char tel[11];
public:
int count;
char address[20];
Family();
};
21.
struct Universe {
private:
char creator[10];
int size;
char dateCreated[10];
public :
Universe();
};
<실습문제>
1.
class Tower {
public :
int height;
int getHeight();
Tower();
Tower(int x);
};
Tower::Tower() {
height = 1;
}
Tower::Tower(int h) {
height = h;
}
int Tower::getHeight() {
return height;
}
2.
class Date {
int year, month, day;
public:
Date(int y, int m, int d);
Date(string s);
void show();
int getYear();
int getMonth();
int getDay();
};
Date::Date(int y, int m, int d) {
year = y;
month = m;
day = d;
}
Date::Date(string s) {
char ch[100];
strcpy(ch, s.c_str());
year = stoi(strtok(ch, "/"));
month = stoi(strtok(NULL, "/"));
day = stoi(strtok(NULL, "/"));
}
void Date::show() {
cout << year << "년" << month << "월" << day << "일";
}
int Date::getYear() {
return year;
}
int Date::getMonth() {
return month;
}
int Date::getDay() {
return day;
}
3.
class Account {
string name;
int id, balance;
public:
string getOwner();
void deposit(int x);
void withdraw(int x);
int inquiry();
Account(string s, int id, int bal);
};
Account::Account(string s, int i, int bal) {
name = s;
id = i;
balance = bal;
}
string Account::getOwner() {
return name;
}
void Account::deposit(int x) {
balance += x;
}
void Account::withdraw(int x) {
balance -= x;
}
int Account::inquiry() {
return balance;
}
4.
class CoffeeMachine {
int cfe, water, sugar;
public:
void drinkEspresso();
void show();
void drinkAmericano();
void drinkSugarCoffee();
void fill();
void show();
CoffeeMachine(int c, int w, int s);
};
CoffeeMachine::CoffeeMachine(int c, int w, int s) {
cfe = c;
water = w;
sugar = s;
}
void CoffeeMachine::drinkEspresso() {
cfe--;
water--;
}
void CoffeeMachine::drinkAmericano() {
cfe--;
water -= 2;
}
void CoffeeMachine::drinkSugarCoffee() {
cfe--;
water -= 2;
sugar--;
}
void CoffeeMachine::fill() {
cfe = 10;
water = 10;
sugar = 10;
}
void CoffeeMachine::show() {
cout << "커피 머신 상태, 커피:" << cfe << " 물:" << water << " 설탕:" << sugar;
}
5.
class Random {
public:
int next();
int nextInRange(int a, int b);
Random();
};
Random::Random(){
srand((unsigned int)time(0));
}
int Random::next() {
return rand();
}
int Random::nextInRange(int a, int b) {
return rand() % (b - a + 1) + a;
}
6.
class EvenRandom {
public:
int next();
int nextinrange(int a, int b);
EvenRandom();
};
EvenRandom::EvenRandom() {
srand((unsigned int)time(0));
}
int EvenRandom::next() {
int n = rand();
if (n % 2 == 0) return n;
else next();
}
int EvenRandom::nextinrange(int a, int b) {
int n = rand() % (b - a + 1) + a;
if (n % 2 == 0) return n;
else nextinrange(a, b);
}
7.
class SelctableRandom {
public:
int next(int value); //value가 0이면 짝수, 아니면 홀수
int nextinrange(int value, int a, int b);
SelctableRandom();
};
SelctableRandom::SelctableRandom() {
srand((unsigned int)time(NULL));
}
int SelctableRandom::next(int v) {
int n;
while (true) {
n = rand();
if (n % 2 == v) {
return n;
}
}
}
int SelctableRandom::nextinrange(int v, int a, int b) {
int result;
while (true) {
result = rand() % (b - a + 1) + a;
if (result % 2 == v) {
return result;
}
}
}
8.
class Integer {
int number;
public:
int get();
bool isEven();
Integer(int n);
};
inline Integer::Integer(int n) {
number = n;
}
inline int Integer::get() {
return number;
}
inline bool Integer::isEven() {
if (number % 2 == 0) return true;
else false;
}
9.
class Oval {
int width, height;
public :
Oval();
Oval(int w, int h);
~Oval();
int getWidth();
int getHeight();
void set(int w, int h);
void show();
};
Oval::Oval() {
}
Oval::Oval(int w, int h) {
width = w;
height = h;
}
Oval::~Oval() {
cout << "Oval 소멸 : width = " << width << ", height = " << height << endl;
}
int Oval::getWidth() {
return width;
}
int Oval::getHeight() {
return height;
}
void Oval::set(int w, int h) {
width = w;
height = h;
}
void Oval::show() {
cout << width << ", " << height << endl;
}
10, 11, 12 : 헤더파일과 cpp분리 문제
- 생략 -
클래스 선언부는 .h에, 클래스 구현부는 .cpp 에 저장하고(.cpp에서는 .h를 불러와야함),
main.cpp에는 #include하여 .h와 .cpp을 불러오고 나머지 코드를 작성하면 된다.
'Major > C&C++' 카테고리의 다른 글
[C++] 명품 C++ Programming 4장 연습문제 (4) | 2021.08.25 |
---|---|
[C++] 명품 C++ Programming 4장 개념정리 (0) | 2021.08.11 |
[C++] 명품 C++ Programming 3장 개념정리 (2) (0) | 2021.07.28 |
[C++] 명품 C++ Programming 3장 개념정리 (1) (0) | 2021.07.24 |
[C++] 명품 C++ Programming 2장 연습문제 (0) | 2021.07.12 |