在C++中,模板是一种强大的特性,它允许你编写与类型无关的代码。模板可以用于创建模板类和模板函数。下面是如何在Ubuntu环境下使用模板类和函数的简单示例。
首先,我们来看一个模板函数的例子。假设你想写一个函数来交换两个变量的值,而不关心它们的类型。你可以使用模板来实现这一点:
#include <iostream>
// 模板函数,用于交换两个变量的值
template <typename T>
void swapValues(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
int main() {
int x = 10, y = 20;
std::cout << "Before swap: x = "<< x << ", y = "<< y << std::endl;
swapValues(x, y); // 使用模板函数交换x和y的值
std::cout << "After swap: x = "<< x << ", y = "<< y << std::endl;
double a = 1.5, b = 2.5;
std::cout << "Before swap: a = "<< a << ", b = "<< b << std::endl;
swapValues(a, b); // 使用模板函数交换a和b的值
std::cout << "After swap: a = "<< a << ", b = "<< b << std::endl;
return 0;
}
将上述代码保存到文件swap.cpp中,然后在Ubuntu终端中使用以下命令编译和运行它:
g++ -o swap swap.cpp
./swap
接下来,我们来看一个模板类的例子。假设你想创建一个简单的数组类,它可以存储任何类型的元素。你可以使用模板来实现这一点:
#include <iostream>
// 模板类,用于表示一个动态数组
template <typename T>
class Array {
private:
T* data; // 指向动态数组的指针
size_t size; // 数组的大小
public:
// 构造函数
Array(size_t size) : size(size) {
data = new T[size];
}
// 析构函数
~Array() {
delete[] data;
}
// 获取数组大小
size_t getSize() const {
return size;
}
// 重载下标运算符
T& operator[](size_t index) {
return data[index];
}
// 常量版本的重载下标运算符
const T& operator[](size_t index) const {
return data[index];
}
};
int main() {
Array<int> intArray(5); // 创建一个可以存储5个整数的数组
intArray[0] = 1;
intArray[1] = 2;
std::cout << "First element of intArray: " << intArray[0] << std::endl;
Array<std::string> stringArray(3); // 创建一个可以存储3个字符串的数组
stringArray[0] = "Hello";
stringArray[1] = "World";
std::cout << "First element of stringArray: " << stringArray[0] << std::endl;
return 0;
}
将上述代码保存到文件array.cpp中,然后在Ubuntu终端中使用以下命令编译和运行它:
g++ -o array array.cpp
./array
这些示例展示了如何在Ubuntu环境下使用模板类和函数。你可以根据自己的需求修改和扩展这些示例。