สมมติว่าเราต้องการสร้างคลาสที่เพิ่มจำนวนเต็มสองจำนวน สองทุ่น และสองสตริง (การเพิ่มสตริงโดยทั่วไปคือการต่อสตริงเข้าด้วยกัน) เมื่อป้อนข้อมูลในตอนแรกเราใช้ตัวเลข 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() จะเชื่อมสตริงเข้าด้วยกัน
-
จากวิธีหลัก ให้ทำดังนี้
-
สำหรับการเริ่มต้น i :=0 เมื่อฉัน
-
type :=ประเภทปัจจุบัน
-
หากประเภทเหมือนกับ "float" แล้ว:
-
ใช้ตัวถูกดำเนินการสองตัว e1 และ e2
-
สร้างวัตถุของ AddItems ประเภท float ที่เรียกว่า myfloat พร้อมรายการ e1
-
โทร myfloat.add(e2) และแสดงผล
-
-
มิฉะนั้นเมื่อประเภทเหมือนกับ "int" ดังนั้น:
-
ใช้ตัวถูกดำเนินการสองตัว e1 และ e2
-
สร้างวัตถุของ AddItems ประเภท float ที่เรียกว่า myint พร้อมรายการ e1
-
โทร myint.add(e2) และแสดงผล
-
-
มิฉะนั้นเมื่อประเภทเหมือนกับ "สตริง" ดังนั้น:
-
ใช้ตัวถูกดำเนินการสองตัว e1 และ e2
-
สร้างวัตถุของ AddItems ประเภท float ที่เรียกว่า mystring พร้อมรายการ e1
-
โทร 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++