C++模板和泛型编程

在 C++ 中,模板是一种强大的特性,用于编写泛型代码。模板允许函数或类能够处理数据类型参数,从而编写更加通用和可重用的代码。C++ 中主要有两种模板:函数模板和类模板。

 

### 1. 函数模板

 

函数模板允许你为不同数据类型编写只需实现一次的函数。从而避免重复代码。定义方式如下:

 

```cpp

#include <iostream>

 

// 函数模板定义

template <typename T>

T add(T a, T b) {

    return a + b;

}

 

int main() {

    // 使用函数模板

    std::cout << add(3, 4) << std::endl; // 输出7,使用int

    std::cout << add(3.5, 4.5) << std::endl; // 输出8.0,使用double

    return 0;

}

```

 

在上述例子中,`template <typename T>` 定义了一个类型参数 `T`,这个类型参数可以在函数 `add` 的定义中使用。

 

### 2. 类模板

 

类模板允许你为不同数据类型定义一个模板类。类模板使得类可以使用泛型编程,从而避免重复定义多个相同逻辑但处理不同数据类型的类。

 

```cpp

#include <iostream>

 

// 类模板定义

template <typename T>

class MyClass {

public:

    MyClass(T value) : data(value) {}

 

    void show() {

        std::cout << data << std::endl;

    }

 

private:

    T data;

};

 

int main() {

    // 使用类模板

    MyClass<int> intObj(10);

    MyClass<double> doubleObj(10.5);

 

    intObj.show(); // 输出10

    doubleObj.show(); // 输出10.5

 

    return 0;

}

```

 

在这里,`template <typename T>` 定义了一个类型参数 `T`,并且可以在类 `MyClass` 的定义中使用。

 

### 3. 模板方法

 

即使模板方法并没有专门的术语,也可以理解为在模板类中定义的函数。这些函数与类中的其他成员方法类似,但具有模板的特性。例如:

 

```cpp

#include <iostream>

 

template <typename T>

class MyTemplateClass {

public:

    MyTemplateClass(T value) : data(value) {}

 

    void show() {

        std::cout << data << std::endl;

    }

 

    T getData() const {

        return data;

    }

 

    void setData(T newValue) {

        data = newValue;

    }

 

private:

    T data;

};

 

int main() {

    // 使用类模板和模板方法

    MyTemplateClass<int> obj(100);

    

    obj.show(); // 输出100

    std::cout << obj.getData() <<std::endl; // 输出100

 

    obj.setData(200);

    obj.show(); // 输出200

 

    return 0;

}

```

 

在这个例子中,`show`、`getData` 和 `setData` 都可以认为是模板类 `MyTemplateClass` 中的模板方法。

 

总结来说,C++ 中的模板提供了编写泛型代码的强大机制,可以用于定义函数模板和类模板,从而实现代码的重用和灵活性。模板方法可以视为在模板类中定义的成员函数,它们同样使用模板参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值