두 개의 정수, 두 개의 부동 소수점 및 두 개의 문자열을 추가할 수 있는 클래스를 만들고 싶다고 가정합니다(문자열 추가는 기본적으로 문자열을 연결하는 것입니다). 처음에 입력으로 숫자 n을 취하면 n개의 다른 작업이 있음을 나타냅니다. 각 연산에서 첫 번째 항목은 [int, float, string] 유형이고 두 번째와 세 번째는 두 개의 피연산자입니다. 따라서 각 줄에는 세 가지 요소가 포함됩니다. 우리는 그것들을 읽고 언급된 대로 작업을 수행해야 합니다.
따라서 입력이 다음과 같으면
5 int 5 7 int 6 9 float 5.25 9.63 string hello world string love C++
그러면 출력은
12 15 14.88 helloworld loveC++
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
클래스 템플릿을 사용하여 AddItems라는 클래스를 정의합니다. add() 및 concatenate() 두 가지 기능이 있습니다. add()는 정수와 부동 소수점을 추가하고 concatenate()는 문자열을 연결합니다.
-
기본 방법에서 다음을 수행하십시오.
-
initialize i :=0의 경우 i
-
유형 :=현재 유형
-
유형이 "float"와 같은 경우:
-
두 개의 피연산자 e1과 e2 사용
-
항목 e1을 사용하여 myfloat라는 float 유형의 AddItems 개체를 만듭니다.
-
myfloat.add(e2)를 호출하고 표시
-
-
그렇지 않으면 유형이 "int"와 같을 때:
-
두 개의 피연산자 e1과 e2 사용
-
항목 e1을 사용하여 myint라는 float 유형의 AddItem 개체를 만듭니다.
-
myint.add(e2)를 호출하고 표시
-
-
그렇지 않으면 유형이 "문자열"과 같을 때:
-
두 개의 피연산자 e1과 e2 사용
-
항목 e1을 사용하여 mystring이라는 float 유형의 AddItems 개체를 만듭니다.
-
mystring.concatenate(e2)를 호출하고 표시
-
-
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <iostream>
using namespace std;
template <class T>
class AddItems {
T element;
public:
AddItems (T arg) {
element=arg;
}
T add (T e2) {
return element+e2;
}
T concatenate (T e2) {
return element+e2;
}
};
int main(){
int n,i;
cin >> n;
for(i=0;i<n;i++) {
string type;
cin >> type;
if(type=="float") {
float e1,e2;
cin >> e1 >> e2;
AddItems<float> myfloat (e1);
cout << myfloat.add(e2) << endl;
}
else if(type == "int") {
int e1, e2;
cin >> e1 >> e2;
AddItems<int> myint (e1);
cout << myint.add(e2) << endl;
}
else if(type == "string") {
string e1, e2;
cin >> e1 >> e2;
AddItems<string> mystring (e1);
cout << mystring.concatenate(e2) << endl;
}
}
}
입력
5 int 5 7 int 6 9 float 5.25 9.63 string hello world string love C++
출력
12 15 14.88 helloworld loveC++