C++中的类模板

一、学习笔记

1.类模板的格式
(1)声明

template<typename T> /* 使用T表示某种类型,比如: */
class AAA {
private:
    T obj;
public:
    void test_func(T& t);
    .....
};

(2)定义

template<typename T>
void AAA<T>::test_func(T& t)  .... 

注意:函数模板和类模板都是typename, 函数模板中template<typename T1, typename T2> 指定两个变量也是可以的。

2.类模板的使用
(1)可以在实例化对象的时候再实例化类模板,eg:
AAA<int> a;
AAA<double> b;

(2)也可以事先实例化:
template AAA<int>;
再使用:
AAA<int> a;

3.类模板的重载(也称为定制,特例化)
(1)声明

template<>
class AAA<int> {
......
public:
    void test(void);
};

(2)定义

void AAA<int>::test(void) ...

定做的AAA<int>中的内容可以和模板AAA完全不一样!

4.函数参数若为引用,若想传入一个数值,函数参数应该定义为const引用

5.只有在使用类模板定义类的时候才会生成对应的代码

5.C++中的链表操作和容器里面大量使用到了类模板。

6.函数模板和类模板应该放在头文件中,因为其只是编译指令,编译器在编译的时候根据这些指令来生成代码,只有把它放在头文件中才能供更多的文件使用。

 

二、例子

复制代码
#include <iostream>

using namespace std;

template<typename T>    //模板类
class Person {
    T a;
public:
    void set(const T &a);
    void get() {
        cout << "Person: a = " << this->a << endl;
    }
};

template<typename T> void Person<T>::set(const T &a) {
    this->a = a;
}



template<>
class Person<int> {        //这个模板类的一个特例化
    int a;
public:
    void set(const int &a);
    void get() {
        cout << "Person<int>: a = " << this->a << endl;
    }
};

void Person<int>::set(const int &a) {
    this->a = a;
}


int main() {
    Person<int> p1;
    p1.set(100);
    p1.get();

    Person<double> p2;
    p2.set(3.14);
    p2.get();

    return 0;
}

/*
Person<int>: a = 100    优先调用特例化的模板类
Person: a = 3.14

*/
复制代码

 

posted on   Hello-World3  阅读(262)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示