💻 개인공부 💻/C | C++

[C++] 다중상속을 이용한 연산 프로그램(feat. public 다중상속)

공대생 배기웅 2020. 5. 20. 03:30
반응형

1. 문제

 

2. 요구사항 분석

 

1.     Cal클래스 생성

2.     계산의 결과를 출력하는 double(나눗셈이 있으므로)형태의 메소드인 calc()를 생성

3.     이를 public형태로 상속받는 adder, subtractor, multiplier, divider클래스 생성

4.     divider클래스 생성시 나누는 수가 0인 경우를 고려

3. 클래스 설계도

 

4. 프로그램 설계도

5. 소스코드

#include<iostream>

#include<string>

using namespace std;//모든 cin,cout에 std를 쓰지 않기 위해 작성

class Cal {//Cal 클래스 작성

void input() {

cout << "정수 2개를 입력하세요" << endl;

cin >> a >> b;

}

protected: //protected, 선언된 클래스와 이를 상속하는 클래스에서만 사용가능

int a, b;

virtual double calc(int a, int b) = 0;//연산을 해주는 calc메소드

public:

void run() {

input();//정수2개를 입력하는 메소드

cout << "계산된 값은" << calc(a, b) << endl;

}

};

class Adder :public Cal {//Cal클래스를 상속하는 Adder클래스

//다중상속의 일부, Adder클래스에서의 calc메소드는 a와 b를 더한 값을 return 한다

protected://protected, 선언된 클래스와 이를 상속하는 클래스에서만 사용가능

double calc(int a, int b) {

return a + b;//합을 return

}

};

class Subtractor :public Cal {//Cal클래스를 상속하는 Subtractor클래스

//다중상속의 일부, Subtractor클래스에서의 calc메소드는 a와 b를 뺀 값을 return 한다.

protected://protected, 선언된 클래스와 이를 상속하는 클래스에서만 사용가능

double calc(int a, int b) {

return a - b;//차를 return

}

};

class Multiplier :public Cal {//Cal클래스를 상속하는 Multiplier클래스

//다중상속의 일부, Multiplier클래스에서의 calc메소드는 a와 b를 곱한 값을 return 한다.

protected://protected, 선언된 클래스와 이를 상속하는 클래스에서만 사용가능

double calc(int a, int b) {

return a * b;//곱을 return

}

};

class Divider:public Cal {//Cal클래스를 상속하는 Multiplier클래스

string warning() {//string warning메소드

//만약 나누는 수가 0이라면 나눗셈이 이루어지지 않기 때문에 이러한 경우를 방지하기 위해 경고문을 return

return "나누는 수가 0이라서 계산할 수가 없습니다";

}

protected://protected, 선언된 클래스와 이를 상속하는 클래스에서만 사용가능

double calc(int a, int b) {

if (b == 0)//만약 나누는 수가 0이라면

warning();//경고문을 return

else return a / b;//만약 b가 0이 아니라면 나눈 값을 return

}

};

void main() {

Adder adder;//Adder의 객체 생성

Subtractor subtractor;//Subtractor의 객체 생성

Multiplier multiplier;//Mulitplier의 객체 생성

Divider divider;//Divider의 객체 생성

adder.run();//두 수를 입력하고 그 수의 합을 출력

subtractor.run();//두 수를 입력하고 그 수의 차를 출력

multiplier.run();//두 수를 입력하고 그 수의 곱을 출력

divider.run();//두 수를 입력하고 나눈 값을 출력

}


 

6. 실행 결과

7. 의견

 

일단 상속을 여러 번 할 수 있다는 것을 알 수 있게 됨.

그리고 divider 클래스를 작성할 때 b0인 경우를 작성을 해야 하는데 calc()double형이라서 이를 어떻게 나타내야 할지 고민이었는데 double형 메서드에서도 string 메서드를 사용할 수 있다는 점을 배울 수 있었다.

728x90
반응형