#include<iostream>
using namespace std;
// Befor use Template :
int sum_int(int n1, int n2) {
return n1 + n2;
}
float sum_float(float f1, float f2) {
return f1 + f2;
}
// use Template :
template <typename T> // T == any name you want
T sum_T(T t1, T t2) {
return t1 + t2;
}
// Template Calss :
template <typename t>
class Calculator {
public:
t add(t n1, t n2) {
return n1 + n2;
}
t subtract(t n1, t n2) {
return n1 - n2;
}
t multiply(t n1, t n2) {
return n1 * n2;
}
// float return type cuz int/int = int;
float divide(t n1, t n2) {
if (n2 == 0)
return 0;
return float(n1) / n2;
}
};
int main() {
// Test Befor use Template :
cout << "sum_int(5, 7) : " << sum_int(5, 7) << "\n";
cout << "sum_int(5.6, 7.8) : " << sum_int(5.6, 7.8) << "\n";
cout << "sum_float(5, 7) : " << sum_float(5, 7) << "\n";
cout << "sum_float(5.6, 7.8) : " << sum_float(5.6, 7.8) << "\n";
cout << "*********** Template ***********" << "\n";
cout << "sum_T(5, 7) : " << sum_T(5, 7) << "\n";
cout << "sum_T(5.6, 7.8) : " << sum_T(5.6, 7.8) << "\n";
cout << "*********** Class Template ***********" << "\n\n";
cout << "*********** int ***********" << "\n\n";
// className <dataType> objectName;
Calculator <int> intCalculator;
cout << "intCalculator.add(6, 8) : " << intCalculator.add(6, 8) << "\n";
cout << "intCalculator.add(6.3, 8.4) : " << intCalculator.add(6.3, 8.4) << "\n";
cout << "intCalculator.subtract(6, 8) : " << intCalculator.subtract(6, 8) << "\n";
cout << "intCalculator.subtract(6.3, 8.4) : " << intCalculator.subtract(6.3, 8.4) << "\n\n";
cout << "intCalculator.multiply(6, 8) : " << intCalculator.multiply(6, 8) << "\n";
cout << "intCalculator.multiply(6.3, 8.4) : " << intCalculator.multiply(6.3, 8.4) << "\n";
cout << "intCalculator.divide(6, 8) : " << intCalculator.divide(6, 8) << "\n";
cout << "intCalculator.divide(6.3, 8.4) : " << intCalculator.divide(6.3, 8.4) << "\n";
cout << "*********** float ***********" << "\n\n";
Calculator <float> floatCalculator;
cout << "floatCalculator.add(6, 8) : " << floatCalculator.add(6, 8) << "\n";
cout << "floatCalculator.add(6.3, 8.4) : " << floatCalculator.add(6.3, 8.4) << "\n";
cout << "floatCalculator.subtract(6, 8) : " << floatCalculator.subtract(6, 8) << "\n";
cout << "floatCalculator.subtract(6.3, 8.4) : " << floatCalculator.subtract(6.3, 8.4) << "\n\n";
cout << "floatCalculator.multiply(6, 8) : " << floatCalculator.multiply(6, 8) << "\n";
cout << "floatCalculator.multiply(6.3, 8.4) : " << floatCalculator.multiply(6.3, 8.4) << "\n";
cout << "floatCalculator.divide(6, 8) : " << floatCalculator.divide(6, 8) << "\n";
cout << "floatCalculator.divide(6.3, 8.4) : " << floatCalculator.divide(6.3, 8.4) << "\n\n";
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKLy8gQmVmb3IgdXNlIFRlbXBsYXRlIDogCgppbnQgc3VtX2ludChpbnQgbjEsIGludCBuMikgewoJcmV0dXJuIG4xICsgbjI7Cn0KCmZsb2F0IHN1bV9mbG9hdChmbG9hdCBmMSwgZmxvYXQgZjIpIHsKCXJldHVybiBmMSArIGYyOwp9IAoKLy8gdXNlIFRlbXBsYXRlIDogCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gLy8gVCA9PSBhbnkgbmFtZSB5b3Ugd2FudApUIHN1bV9UKFQgdDEsIFQgdDIpIHsKCXJldHVybiB0MSArIHQyOwp9CgoKLy8gVGVtcGxhdGUgQ2Fsc3MgOgp0ZW1wbGF0ZSA8dHlwZW5hbWUgdD4KY2xhc3MgQ2FsY3VsYXRvciB7CnB1YmxpYzoKCXQgYWRkKHQgbjEsIHQgbjIpIHsKCQlyZXR1cm4gbjEgKyBuMjsKCX0KCgl0IHN1YnRyYWN0KHQgbjEsIHQgbjIpIHsKCQlyZXR1cm4gbjEgLSBuMjsKCX0KCgl0IG11bHRpcGx5KHQgbjEsIHQgbjIpIHsKCQlyZXR1cm4gbjEgKiBuMjsKCX0KCQoJLy8gZmxvYXQgcmV0dXJuIHR5cGUgY3V6IGludC9pbnQgPSBpbnQ7CglmbG9hdCBkaXZpZGUodCBuMSwgdCBuMikgewoJCWlmIChuMiA9PSAwKQoJCQlyZXR1cm4gMDsKCQlyZXR1cm4gZmxvYXQobjEpIC8gbjI7Cgl9Cn07CgogCmludCBtYWluKCkgewoKCS8vIFRlc3QgQmVmb3IgdXNlIFRlbXBsYXRlIDoKCWNvdXQgPDwgInN1bV9pbnQoNSwgNykgOiAiIDw8IHN1bV9pbnQoNSwgNykgPDwgIlxuIjsKCWNvdXQgPDwgInN1bV9pbnQoNS42LCA3LjgpIDogIiA8PCBzdW1faW50KDUuNiwgNy44KSA8PCAiXG4iOwoKCWNvdXQgPDwgInN1bV9mbG9hdCg1LCA3KSA6ICIgPDwgc3VtX2Zsb2F0KDUsIDcpIDw8ICJcbiI7Cgljb3V0IDw8ICJzdW1fZmxvYXQoNS42LCA3LjgpIDogIiA8PCBzdW1fZmxvYXQoNS42LCA3LjgpIDw8ICJcbiI7CgoJY291dCA8PCAiKioqKioqKioqKiogVGVtcGxhdGUgKioqKioqKioqKioiIDw8ICJcbiI7CgoKCWNvdXQgPDwgInN1bV9UKDUsIDcpIDogIiA8PCBzdW1fVCg1LCA3KSA8PCAiXG4iOwoJY291dCA8PCAic3VtX1QoNS42LCA3LjgpIDogIiA8PCBzdW1fVCg1LjYsIDcuOCkgPDwgIlxuIjsKCgoJY291dCA8PCAiKioqKioqKioqKiogQ2xhc3MgVGVtcGxhdGUgKioqKioqKioqKioiIDw8ICJcblxuIjsKCWNvdXQgPDwgIioqKioqKioqKioqIGludCAqKioqKioqKioqKiIgPDwgIlxuXG4iOwoJLy8gY2xhc3NOYW1lIDxkYXRhVHlwZT4gb2JqZWN0TmFtZTsKCglDYWxjdWxhdG9yIDxpbnQ+IGludENhbGN1bGF0b3I7Cgljb3V0IDw8ICJpbnRDYWxjdWxhdG9yLmFkZCg2LCA4KSA6ICIgPDwgaW50Q2FsY3VsYXRvci5hZGQoNiwgOCkgPDwgIlxuIjsKCWNvdXQgPDwgImludENhbGN1bGF0b3IuYWRkKDYuMywgOC40KSA6ICIgPDwgaW50Q2FsY3VsYXRvci5hZGQoNi4zLCA4LjQpIDw8ICJcbiI7Cgljb3V0IDw8ICJpbnRDYWxjdWxhdG9yLnN1YnRyYWN0KDYsIDgpIDogIiA8PCBpbnRDYWxjdWxhdG9yLnN1YnRyYWN0KDYsIDgpIDw8ICJcbiI7Cgljb3V0IDw8ICJpbnRDYWxjdWxhdG9yLnN1YnRyYWN0KDYuMywgOC40KSA6ICIgPDwgaW50Q2FsY3VsYXRvci5zdWJ0cmFjdCg2LjMsIDguNCkgPDwgIlxuXG4iOwoJY291dCA8PCAiaW50Q2FsY3VsYXRvci5tdWx0aXBseSg2LCA4KSA6ICIgPDwgaW50Q2FsY3VsYXRvci5tdWx0aXBseSg2LCA4KSA8PCAiXG4iOwoJY291dCA8PCAiaW50Q2FsY3VsYXRvci5tdWx0aXBseSg2LjMsIDguNCkgOiAiIDw8IGludENhbGN1bGF0b3IubXVsdGlwbHkoNi4zLCA4LjQpIDw8ICJcbiI7Cgljb3V0IDw8ICJpbnRDYWxjdWxhdG9yLmRpdmlkZSg2LCA4KSA6ICIgPDwgaW50Q2FsY3VsYXRvci5kaXZpZGUoNiwgOCkgPDwgIlxuIjsKCWNvdXQgPDwgImludENhbGN1bGF0b3IuZGl2aWRlKDYuMywgOC40KSA6ICIgPDwgaW50Q2FsY3VsYXRvci5kaXZpZGUoNi4zLCA4LjQpIDw8ICJcbiI7CgkKCWNvdXQgPDwgIioqKioqKioqKioqIGZsb2F0ICoqKioqKioqKioqIiA8PCAiXG5cbiI7CgoJQ2FsY3VsYXRvciA8ZmxvYXQ+IGZsb2F0Q2FsY3VsYXRvcjsKCWNvdXQgPDwgImZsb2F0Q2FsY3VsYXRvci5hZGQoNiwgOCkgOiAiIDw8IGZsb2F0Q2FsY3VsYXRvci5hZGQoNiwgOCkgPDwgIlxuIjsKCWNvdXQgPDwgImZsb2F0Q2FsY3VsYXRvci5hZGQoNi4zLCA4LjQpIDogIiA8PCBmbG9hdENhbGN1bGF0b3IuYWRkKDYuMywgOC40KSA8PCAiXG4iOwoJY291dCA8PCAiZmxvYXRDYWxjdWxhdG9yLnN1YnRyYWN0KDYsIDgpIDogIiA8PCBmbG9hdENhbGN1bGF0b3Iuc3VidHJhY3QoNiwgOCkgPDwgIlxuIjsKCWNvdXQgPDwgImZsb2F0Q2FsY3VsYXRvci5zdWJ0cmFjdCg2LjMsIDguNCkgOiAiIDw8IGZsb2F0Q2FsY3VsYXRvci5zdWJ0cmFjdCg2LjMsIDguNCkgPDwgIlxuXG4iOwoJY291dCA8PCAiZmxvYXRDYWxjdWxhdG9yLm11bHRpcGx5KDYsIDgpIDogIiA8PCBmbG9hdENhbGN1bGF0b3IubXVsdGlwbHkoNiwgOCkgPDwgIlxuIjsKCWNvdXQgPDwgImZsb2F0Q2FsY3VsYXRvci5tdWx0aXBseSg2LjMsIDguNCkgOiAiIDw8IGZsb2F0Q2FsY3VsYXRvci5tdWx0aXBseSg2LjMsIDguNCkgPDwgIlxuIjsKCWNvdXQgPDwgImZsb2F0Q2FsY3VsYXRvci5kaXZpZGUoNiwgOCkgOiAiIDw8IGZsb2F0Q2FsY3VsYXRvci5kaXZpZGUoNiwgOCkgPDwgIlxuIjsKCWNvdXQgPDwgImZsb2F0Q2FsY3VsYXRvci5kaXZpZGUoNi4zLCA4LjQpIDogIiA8PCBmbG9hdENhbGN1bGF0b3IuZGl2aWRlKDYuMywgOC40KSA8PCAiXG5cbiI7CgoJcmV0dXJuIDA7Cn0=