商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Ubuntu C++如何使用模板类和函数

Ubuntu C++如何使用模板类和函数

  发布于2026-07-13 阅读(0)

扫一扫,手机访问

C++ 的模板,说白了就是让你写出“与类型无关”的代码。什么意思?你写一个函数或者一个类,不需要提前把类型定死——int、double、string,甚至是自定义类型,都可以往里塞。这在很多场景下能省下大量重复代码。下面就在 Ubuntu 环境下,用两个最典型的例子把模板函数和模板类讲清楚。

Ubuntu C++如何使用模板类和函数

模板函数

先看模板函数。最常见的场景是交换两个变量的值。你当然可以为每种类型写一个 swap,但有了模板,一行定义就够了:

#include 

// 模板函数,用于交换两个变量的值
template 
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

编译器会根据你传入的参数类型,自动生成对应版本的 swapValues。int 和 double 都能用,完全不需要你手动写两份。

模板类

接下来是模板类。假设你想实现一个简单的动态数组,能装任何类型的元素——用模板类来做最直接:

#include 

// 模板类,用于表示一个动态数组
template 
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 intArray(5);       // 创建一个可以存储5个整数的数组
    intArray[0] = 1;
    intArray[1] = 2;
    std::cout << "First element of intArray: " << intArray[0] << std::endl;

    Array stringArray(3);  // 创建一个可以存储3个字符串的数组
    stringArray[0] = "Hello";
    stringArray[1] = "World";
    std::cout << "First element of stringArray: " << stringArray[0] << std::endl;

    return 0;
}

保存为 array.cpp 后,同样用 g++ 编译:

g++ -o array array.cpp
./array

这个 Array 类在实例化时指定具体类型,比如 ArrayArray,内部存储的数据类型就跟着变了。模板类的灵活性就在这里——一套代码,适配无数种类型。你完全可以基于这个思路,扩展出更复杂的容器或算法,只要记住模板的声明放在头文件里,实现和定义通常不分开(否则链接会报错),这一点和普通类不太一样。

以上两个例子覆盖了模板最核心的两种用法。Ubuntu 下的编译环境很标准,g++ 对 C++11/14/17 支持都很好,你可以放心把模板代码写得更现代一些,比如用 autodecltype 和可变参数模板——不过那是后面的进阶话题了。

本文转载于:https://www.yisu.com/ask/74473974.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注