1. 문제
[3~4] 다음 추상 클래스 LoopAdder가 있다.
3. LoopAdder 클래스를 상속받아 다음 main() 함수와 실행 결과처럼 되도록 ForLoopAdder 클래스를 작성하라. ForLoopAdder 클래스의 calculate() 함수는 for 문을 이용하여 합을 구한다.
4. LoopAdder 클래스를 상속받아 다음 main() 함수와 실행 결과처럼 되도록 WhileLoopAdder, DoWhileLoopAdder 클래스를 작성하라. while 문, do-while 문을 이용하여 합을 구하도록 calculate() 함수를 작성하면 된다.
2. 결과
3.
4.
3. 코드
#include <iostream>
#include <string>
using namespace std;
class LoopAdder {
string name;
int x, y, sum;
void read();
void write();
protected :
LoopAdder( string name="") {
this->name = name;
}
int getX() { return x; }
int getY() { return y; }
virtual int calculate() = 0;
public :
void run();
};
void LoopAdder::read() {
cout << name << ":" << endl;
cout << "처음 수에서 두번째 수까지 더합니다. 두 수를 입력하세요 >> ";
cin >> x >> y;
}
void LoopAdder::write() {
cout << x << "에서 " << y << "까지의 합 = " << sum << " 입니다" << endl;
}
void LoopAdder::run() {
read();
sum = calculate();
write();
}
class ForLoopAdder : public LoopAdder {
public :
ForLoopAdder(string name) : LoopAdder(name){;}
int calculate() {
int sum=0;
for(int i=getX(); i<=getY(); i++)
sum += i;
return sum;
}
};
int main() {
ForLoopAdder forLoop("For Loop");
forLoop.run();
}
4.
#include <iostream>
#include <string>
using namespace std;
class LoopAdder {
string name;
int x, y, sum;
void read();
void write();
protected :
LoopAdder( string name="") {
this->name = name;
}
int getX() { return x; }
int getY() { return y; }
virtual int calculate() = 0;
public :
void run();
};
void LoopAdder::read() {
cout << name << ":" << endl;
cout << "처음 수에서 두번째 수까지 더합니다. 두 수를 입력하세요 >> ";
cin >> x >> y;
}
void LoopAdder::write() {
cout << x << "에서 " << y << "까지의 합 = " << sum << " 입니다" << endl;
}
void LoopAdder::run() {
read();
sum = calculate();
write();
}
class WhileLoopAdder : public LoopAdder {
public :
WhileLoopAdder(string name) : LoopAdder(name){;}
int calculate() {
int sum=0;
int x = getX();
while( x <= getY() ) {
sum += x;
x++;
}
return sum;
}
};
class DoWhileLoopAdder : public LoopAdder {
public :
DoWhileLoopAdder(string name) : LoopAdder(name){;}
int calculate() {
int sum=0;
int x = getX();
do {
sum += x;
x++;
} while( x <= getY() );
return sum;
}
};
int main() {
WhileLoopAdder whileLoop("While Loop");
DoWhileLoopAdder doWhileLoop("Do while Loop");
whileLoop.run();
doWhileLoop.run();
}
4. 설명
순수 가상 함수인 calculate를 각각 함수의 용도에 맞게 구현하는 문제 입니다.
for문과 while문으로 구현하는 방법은 거의 같다고 봐도 무방합니다.
※ 주의 하실 점은 do-while문은 우선 한번 실행한 후 조건문을 비교한다는 것입니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 9장 6번 (0) | 2019.05.03 |
---|---|
명품 C++ programming 실습문제 9장 5번 (0) | 2019.05.03 |
명품 C++ programming 실습문제 9장 1번, 2번 (0) | 2019.05.02 |
명품 C++ programming 8장 Open Challenge (0) | 2019.04.29 |
명품 C++ programming 실습문제 8장 9번 (0) | 2019.04.29 |