C/C++经典案例四 函数和类模板template的使用

C++ 函数模板,意思就是提供一个通用的函数模板,供不同类型的地方使用,有函数模板和类模板:

一、template函数模板:

定义格式为:

  template <typename/class  T>

  T  test(T parm){ };

特点:

  模板没有调用时,是不会被实例化的,如果有调用,编译器会生成对应的函数;

  模板定义和实现要放在一个文件中,否则编译会链接出错或者直接把模板定义在头文件中;

#include <iostream>

template <typename/class T> 
T add(T a, T b) {
    return a + b;
}

int main()
{
    std::cout << "Hello World!\n";
    cout << add<int>(20, 30) << endl;

    add<Point>(Point(10, 20), Point(30, 40));

    return 0;
};

 

二、template类模板:

定义一个通用的Array 的数组类,可以自行的向定义的数组类中添加内容:

#include "template.h"

class Point {
private:
    int m_x;
    int m_y;

public:
    Point(int x, int y) : m_x(x), m_y(y) {};
};

int main()
{
    Array<int> array(3); 
    array.add(20);
    array.add(30);
    array.add(40);
    //array.add(50);

    cout << array.get(0) << endl;

    Array<void *> array1;
    array1.add(&Point(1, 2));
    array1.add(&Point(1, 2));

    return 0;
};

对应的类的实现:

//template.h
#pragma once
#include <iostream>
using namespace std;

//定义一个类Array的类
template <typename Item>
class Array {
public:
    Item* m_Data;//指向内容数据
    int m_size;  //数组实际大小
    int m_capacity;//数组容量

public:
    Array(int capacity = 0);
    ~Array();
    void add(Item value);
    Item get(int index);
};

//在下面分别实现对应Array的方法
template <typename Item>
Array<Item>::Array(int capacity = 0) {
    m_capacity = (capacity > 0) ? capacity : 10;
    m_Data = new Item[m_capacity];
};

template <typename Item>
Array<Item>::~Array() {
    if (m_Data == NULL) return;
    delete[] m_Data;
};

template <typename Item>
void Array<Item>::add(Item value) {
    if (m_size == m_capacity) {
        cout << "空间不够" << endl;
        //return;
    }
    m_Data[m_size++] = value;
};

template <typename Item>
Item Array<Item>::get(int index) {
    if (index < 0 || index >= m_size) {
        throw "数组越界";
    }
    return m_Data[index];
};

作者:frank_zyp
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文无所谓版权,欢迎转载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值