【C++入门】函数模板

文章目录


前言

在C++编程中,模板是一个强大的工具,可以让我们编写更通用、可复用的代码。模板可以用于函数和类,使它们能够处理不同的数据类型,而无需为每种类型编写单独的代码。在本文中,我们将介绍函数模板及其用途,并通过示例代码演示如何编写和使用函数模板。接下来,我们还将介绍类模板以及如何创建和使用类模板实例。


函数模板

什么是函数模板?

函数模板是一个函数的蓝图或公式,可以生成多个版本的该函数,这些版本可以处理不同的数据类型。使用函数模板,我们可以编写一次代码,然后针对不同的数据类型生成不同的函数版本。

为什么要引入函数模板?

函数模板的引入有助于减少代码重复,提高代码的可维护性和可读性。当我们需要对多种数据类型执行相同的操作时,函数模板可以避免为每种数据类型编写相同的函数逻辑,从而使代码更加简洁和高效。

如何编写函数模板?

编写函数模板需要使用 template 关键字,并在函数名前面加上模板参数列表。模板参数列表通常包括类型参数(用 typenameclass 关键字声明)。下面是一个简单的函数模板示例,用于交换两个变量的值:

cpp 复制代码
#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);
    std::cout << "After swap: x = " << x << ", y = " << y << std::endl;

    double a = 1.1, b = 2.2;
    std::cout << "Before swap: a = " << a << ", b = " << b << std::endl;
    swapValues(a, b);
    std::cout << "After swap: a = " << a << ", b = " << b << std::endl;

    return 0;
}

如何调用函数模板?

调用函数模板与调用普通函数类似。编译器会根据传递的参数类型自动推导模板参数。在上面的示例中,我们分别调用了 swapValues 函数来交换 int 类型和 double 类型的变量值。我们也可以使用swapValues<你指定的T类型>(a,b)然后这个T就变成你指定的类型了

类模板

什么是类模板?

类模板是一个类的蓝图或公式,可以生成多个版本的该类,这些版本可以处理不同的数据类型。类模板允许我们定义一个通用的类,然后根据需要为不同的数据类型生成具体的类。

如何编写类模板?

编写类模板需要使用 template 关键字,并在类名前面加上模板参数列表。下面是一个简单的类模板示例,用于存储和操作一对值:

cpp 复制代码
#include <iostream>

// 类模板
template <typename T>
class Pair {
private:
    T first;
    T second;

public:
    Pair(T a, T b) : first(a), second(b) {}

    T getFirst() const {
        return first;
    }

    T getSecond() const {
        return second;
    }

    void setFirst(T a) {
        first = a;
    }

    void setSecond(T b) {
        second = b;
    }
};

int main() {
    Pair<int> intPair(1, 2);
    std::cout << "First: " << intPair.getFirst() << ", Second: " << intPair.getSecond() << std::endl;

    Pair<double> doublePair(1.1, 2.2);
    std::cout << "First: " << doublePair.getFirst() << ", Second: " << doublePair.getSecond() << std::endl;
    
	Pair<float> *floatPair = new Pair<float>(1.1, 2.2);

    return 0;
}

创建类示例的时候你要记住,只要遇见类,你就需要加<>模板参数

模板类型的指定

在C++模板中,我们可以为模板参数指定默认类型。当我们没有明确指定模板参数类型时,编译器会使用默认类型。这种机制在编写通用代码时非常有用,因为它可以为常见的情况提供合理的默认值,同时仍然允许用户在需要时指定其他类型。

为模板参数指定默认类型

可以在模板参数列表中为类型参数指定默认类型,语法如下:

cpp 复制代码
template <typename T = int>
class Example {
private:
    T value;

public:
    Example(T val) : value(val) {}

    T getValue() const {
        return value;
    }
};

在上面的示例中,模板参数 T 的默认类型为 int。这意味着如果在实例化 Example 类时未指定类型,编译器将使用 int 类型。

使用默认类型的类模板

当实例化类模板且未显式指定模板参数类型时,默认类型将被使用:

cpp 复制代码
int main() {
    Example<> defaultExample(10); // 使用默认类型 int
    std::cout << "Default type value: " << defaultExample.getValue() << std::endl;

    Example<double> doubleExample(5.5); // 显式指定类型为 double
    std::cout << "Specified type value: " << doubleExample.getValue() << std::endl;

    return 0;
}

在这个示例中,defaultExample 使用默认的 int 类型,而 doubleExample 显式指定了 double 类型。

通过为模板参数指定默认类型,我们可以简化模板的使用,使代码更加灵活和易读。


总结

模板是C++中一个强大的功能,能够提高代码的通用性和复用性。通过使用函数模板和类模板,我们可以编写适用于多种数据类型的通用代码,从而避免代码重复,提高代码的可维护性。在本文中,我们介绍了函数模板和类模板的基本概念、编写方法及使用示例。希望通过这些内容,读者能够更好地理解和掌握C++模板的使用。

相关推荐
Moonnnn.22 分钟前
【单片机期末】单片机系统设计
笔记·单片机·嵌入式硬件·学习
why1513 小时前
微服务商城-商品微服务
数据库·后端·golang
门前云梦5 小时前
《C语言·源初法典》---C语言基础(上)
c语言·开发语言·学习
achene_ql5 小时前
select、poll、epoll 与 Reactor 模式
linux·服务器·网络·c++
c7_ln5 小时前
I2C 外设知识体系:从基础到 STM32 硬件实现
stm32·单片机·嵌入式硬件
結城5 小时前
mybatisX的使用,简化springboot的开发,不用再写entity、mapper以及service了!
java·spring boot·后端
sjtu_cjs6 小时前
Tensorrt python api 10.11.0笔记
开发语言·笔记·python
哆啦A梦的口袋呀6 小时前
深入理解系统:UML类图
开发语言·python·uml
虎冯河6 小时前
怎么让Comfyui导出的图像不包含工作流信息,
开发语言·python
星辰离彬6 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
java·spring boot·后端·sql·mysql·性能优化