สมมติว่าเราต้องการสร้างคลาสที่เพิ่มจำนวนเต็มสองจำนวน สองทุ่น และสองสตริง (การเพิ่มสตริงโดยทั่วไปคือการต่อสตริงเข้าด้วยกัน) เมื่อป้อนข้อมูลในตอนแรกเราใช้ตัวเลข 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++