สมมติว่าเราต้องการสร้างคลาสที่บวกได้ทั้ง int, float และ string (string คือการต่อสตริง) อินพุตแรกคือ n จำนวนออเปอเรชัน แต่ละออเปอเรชันมี 3 ส่วน: ประเภท [int, float, string] และตัวถูกดำเนินการ 2 ตัว
เช่น อินพุต: 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 แบบ template มีฟังก์ชัน add() สำหรับ int/float และ concatenate() สำหรับ string
- ใน main อ่าน n แล้ววนลูป n รอบ:
- อ่าน type
- ถ้า float: อ่าน e1, e2 สร้าง AddItems<float> เรียก add(e2)
- ถ้า int: อ่าน e1, e2 สร้าง AddItems<int> เรียก add(e2)
- ถ้า string: อ่าน e1, e2 สร้าง AddItems<string> เรียก 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++