


Khusboo Tayal
#include <iostream>
using namespace std;
// Function for integers
int addInt(int a, int b) {
return a + b;
}
// Function for doubles
double addDouble(double a, double b) {
return a + b;
}
int main() {
cout << "Int sum: " << addInt(3, 4) << endl;
cout << "Double sum: " << addDouble(3.5, 4.2) << endl;
return 0;
}
Int sum: 7 Double sum: 7.7
Function templates allow you to create a single function that works with any data type.
template <typename T>
T functionName(T param1, T param2) {
// Function body
}#include <iostream>
using namespace std;
// Generic function template
template <typename T>
T add(T a, T b) {
return a + b;
}
int main() {
cout << "Int sum: " << add(3, 4) << endl;
cout << "Double sum: " << add(3.5, 4.2) << endl;
cout << "String concatenation: " << add(string("Hello "), string("World")) << endl;
return 0;
}
Int sum: 7 Double sum: 7.7 String concatenation: Hello World
You can use multiple template parameters.
#include <iostream>
using namespace std;
template <typename T, typename U>
void display(T a, U b) {
cout << "First: " << a << ", Second: " << b << endl;
}
int main() {
display(10, "Apples");
display(3.14, 42);
return 0;
}
First: 10, Second: Apples First: 3.14, Second: 42
You can set default values for template parameters.
#include <iostream>
using namespace std;
template <typename T = int>
T multiply(T a, T b) {
return a * b;
}
int main() {
cout << "Default (int) multiplication: " << multiply(4, 5) << endl;
cout << "Double multiplication: " << multiply<double>(4.2, 3.5) << endl;
return 0;
}Default (int) multiplication: 20 Double multiplication: 14.7
Class templates allow you to create classes that work with any data type.
template <typename T>
class ClassName {
T data;
public:
ClassName(T value) : data(value) {}
void display() {
cout << "Data: " << data << endl;
}
};
#include <iostream>
using namespace std;
// Generic class template
template <typename T>
class Container {
T value;
public:
Container(T v) : value(v) {}
void display() {
cout << "Value: " << value << endl;
}
};
int main() {
Container<int> intObj(42);
Container<double> doubleObj(3.14);
Container<string> stringObj("Hello");
intObj.display();
doubleObj.display();
stringObj.display();
return 0;
}
Value: 42 Value: 3.14 Value: Hello
template <typename T>
class ClassName {
// Generic implementation
};
// Specialized version for int
template <>
class ClassName<int> {
// Specialized implementation for int
};
#include <iostream>
using namespace std;
template <typename T>
class Printer {
public:
void print(T value) {
cout << "Generic: " << value << endl;
}
};
// Specialized version for strings
template <>
class Printer<string> {
public:
void print(string value) {
cout << "String Printer: " << value << endl;
}
};
int main() {
Printer<int> intPrinter;
Printer<string> stringPrinter;
intPrinter.print(42);
stringPrinter.print("Hello World");
return 0;
}
Generic: 42 String Printer: Hello World
#include <iostream>
using namespace std;
template <typename T, int size>
class Array {
T arr[size];
public:
void set(int index, T value) {
if (index >= 0 && index < size)
arr[index] = value;
}
T get(int index) const {
return arr[index];
}
};
int main() {
Array<int, 5> intArray;
intArray.set(0, 10);
intArray.set(1, 20);
cout << "Array[0]: " << intArray.get(0) << endl;
cout << "Array[1]: " << intArray.get(1) << endl;
return 0;
}
Array[0]: 10 Array[1]: 20
In this tutorial, you learned: