본문 바로가기

C++ programming

명품 C++ programming 실습 문제 3장 10번

문제 :

다수의 클래스를 선언하고 활용하는 간단한 문제이다. 더하기(+), 빼기(-), 곱하기(*), 나누기(/)를 수행하는 4개의 클래스를 Add, Sub, Mul, Div를 만들고자 한다.

이들은 모두 공통으로 다음 멤버를 가진다.

 

● int 타입 변수 a, b : 피연산자

● void setValue(int x, int y) 함수 : 매개 변수 x, y를 멤버 a, b에 복사

● int calculate() 함수 : 연산을 실행하고 결과 리턴

 

main() 함수는 Add, Sub, Mul, Div 클래스 타입의 객체 a, s, m, d를 생성하고, 아래와 같이 키보드로부터 두 개의 정수와 연산자를 입력받고, a, s, m, d 객체 중에서 연산을 처리할 객체의 setValue() 함수를 호출한 후, calculate()를 호출하여 결과를 화면에 출력한다.

프로그램은 무한 루프를 돈다.

 

실행 결과 :

 

목적 및 힌트 :

클래스와 객체 활용 연습

 

코드 :

(1) 클래스의 선언부와 구현부를 분리하고, 모든 코드를 Calculator.cpp 파일에 작성하라.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
using namespace std;
 
class Add{
private:
    int a, b;
public:
    void setValue(int x, int y);
    int calculate();
};
void Add::setValue(int x, int y){
   a = x;
   b = y;
}
int Add::calculate(){
   return a + b;
}
 
class Sub{
private:
    int a, b;
public:
    void setValue(int x, int y);
    int calculate();
};
void Sub::setValue(int x, int y){
   a = x;
   b = y;
}
int Sub::calculate(){
   return a - b;
}
    
class Mul{
private:
    int a, b;
public:
    void setValue(int x, int y);
    int calculate();    
};
void Mul::setValue(int x, int y){
   a = x;
   b = y;
}
int Mul::calculate(){
   return a * b;
}
    
class Div{
private:
    int a, b;    
public:
    void setValue(int x, int y);
    int calculate();
};
void Div::setValue(int x, int y){
   a = x;
   b = y;
}
int Div::calculate(){
   return a / b;
}
    
int main() {
    Add a;
    Sub s;
    Mul m;
    Div d;
    int x, y;
    char c;
    while(true){
        cout << "두 정수와 연산자를 입력하세요>>";
        cin >> x >> y >> c;  
        if(c == '+') {
       a.setValue(x,y);
       cout << a.calculate() << endl;
        }
        else if(c == '-') {
       s.setValue(x,y);
       cout << s.calculate() << endl;
        }
        else if(c == '*') {
       m.setValue(x,y);
       cout << m.calculate() << endl;
        }
        else if(c == '/') {
       d.setValue(x,y);
       cout << d.calculate() << endl;
        }
    }
}
 

 

(2) 클래스의 선언부와 구현부를 헤더 파일과 cpp 파일로 나누어 프로그램을 작성하라.
 

● 3-10.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Add{
private:
    int a, b;
public:
    void setValue(int x, int y);
    int calculate();
};
 
class Div{
private:
    int a, b;    
public:
    void setValue(int x, int y);
    int calculate();
};
 
class Mul{
private:
    int a, b;
public:
    void setValue(int x, int y);
    int calculate();    
};
 
class Sub{
private:
    int a, b;
public:
    void setValue(int x, int y);
    int calculate();
};

 

 

● 3-10.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>
using namespace std;
 
#include "3-10.h"
 
void Add::setValue(int x, int y){
        a = x;
        b = y;
    }
int Add::calculate(){
        return a + b;
    }
void Sub::setValue(int x, int y){
        a = x;
        b = y;
    }
int Sub::calculate(){
        return a - b;
    }
void Mul::setValue(int x, int y){
        a = x;
        b = y;
    }
int Mul::calculate(){
        return a * b;
    }
void Div::setValue(int x, int y){
        a = x;
        b = y;
    }
int Div::calculate(){
        return a / b;
    }
 

 

● main.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream>
using namespace std;
 
#include "3-10.h"
 
int main() {
    Add a;
    Sub s;
    Mul m;
    Div d;
    int x, y;
    char c;
    
    while(true){
        cout << "두 정수와 연산자를 입력하세요>>";
        cin >> x >> y >> c;  
        if(c == '+') {
            a.setValue(x,y);
            cout << a.calculate() << endl;
        }
        else if(c == '-') {
            s.setValue(x,y);
            cout << s.calculate() << endl;
        }
        else if(c == '*') {
            m.setValue(x,y);
            cout << m.calculate() << endl;
        }
        else if(c == '/') {
            d.setValue(x,y);
            cout << d.calculate() << endl;
        }
    }
}
 

 

설명 :

하나의 프로그램을 헤더 파일과 cpp 파일로 나누어 작성하는 문제입니다.

각각의 파일들을 한 프로젝트에 넣어놓고 구현부 cpp 파일과 main cpp 파일에서 헤더파일을 include 해주시면 됩니다.

앞으로 프로그램을 작성할 때 지금처럼 헤더파일과 구현부 cpp파일, main cpp파일로 나누어 작성하는걸 추천합니다.