当前位置: 首页> 健康> 美食 > C++模版初阶

C++模版初阶

时间:2025/7/11 20:21:59来源:https://blog.csdn.net/GGbond665/article/details/142323575 浏览次数:0次

1.函数模版

1.写法与作用

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

模版本质是为了适应指定类型,而不用写多个函数重载完成同一功能。

这个加法函数就可以适应int、double等类型的加法。

2.推导实例化

//推导实例化
int a = 0, b = 0;
double c = 3.0, d = 4.0;
int e = add(a, b);
double f = add(c, d);

在这里模版函数会识别实参的类型来推导那个T类型是什么类型。

3.显式实例化

//显式实例化
int a = 0, b = 0;
double c = 3.0, d = 4.0;//指定T类型为int类型
int e = add<int>(a, b);
//指定T类型为double类型
double f = add<double>(c, d);

2.类模版

template<class T>
class Stack
{
public://实现了可以用栈存储不同类型的数据的功能Stack(int n = 4):_array(new T[n]),_size(0),_capacity(n){}~Stack(){delete[] _array;_array = nullptr;_size = _capacity = 0;}void Push(const T& x);private:T* _array;size_t _capacity;size_t _size;
};//声明与定义分离,需要指定类域与类模版template<class T>
void Stack<T>::Push(const T& x)//用引用减少拷贝构造,提高效率
{if (_size == _capacity){T* tmp = new T[_capacity * 2];memcpy(tmp, _array, sizeof(T) * _size);delete[] _array;_array = tmp;_capacity *= 2;}_array[_size++] = x;
}int main()
{// 类模板都是显示实例化Stack<int> st1; // intst1.Push(1);st1.Push(2);st1.Push(3);Stack<double> st2; // doublest2.Push(1.1);st2.Push(1.1);st2.Push(1.1);Stack<double>* pst = new Stack<double>;//...delete pst;return 0;
}

关键字:C++模版初阶

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: