博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++模板
阅读量:5118 次
发布时间:2019-06-13

本文共 2293 字,大约阅读时间需要 7 分钟。

模板一般分函数模板与类模板

函数模板:

解决,不同数据进行同种操作时,可以给数据定义一个模板类型,以达到函数的通用性

基本语法

//模版函数定义

template <typename T> //定义模版类型名T

T test(T x){

return x;

}

test<int>();指定以int型替换T,不指定则系统会参数值自动判断;

计算绝对值函数:

#include 
using namespace std;template
T abs(T temp){ temp = temp > 0 ? temp : -temp; return temp;}int main(){ int i = 10; double d = -5.5; cout << abs
(i) << " " << abs
(d) << endl; return 0;}

通过函数模板,计算数值的绝对值,就不用重复为不同类型数据定义函数;

类模板

解决同一种类,定义不过数据,或,其成员函数对不同数据作相同处理;

类模板基本语法:

template <class T>

class abs

{

private:

  int i;

  T x;

public:

  abs(T a, T b){}

}

类模板对象的创建:

abs <int> a;

abs <double> b;

使用例:

#include 
using namespace std;template
class Tes{ private: T i; T j; public: Tes(T x = 0, T y = 0) { i = x; j = y; } T put() { return i * j; } ~Tes() {}};int main(){ Tes
a(2, 5); cout << a.put() <
b(2.5, 5.5); cout << b.put() <

成员函数外部定义方法:

基本形式:

template<模板形参列表> 函数返回类型 类名<模板形参名>::函数名(参数列表){函数体},

template<class T> void Tes<T>::add(参数列表){函数体},

#include 
using namespace std;//定义模板类template
class Tes{ private: T i; T j; public: Tes(T x = 0, T y = 0) { i = x; j = y; } T put() { return i * j; } T add(); ~Tes() {}};//外部定义函数方法template
T Tes
::add(){ return i + j;}//主函数int main(){ Tes
a(2, 5); cout << a.put() <
b(2.5, 5.5); cout << b.put() <

总结:

在类模板中,只要使用到类名的,后面就要有<>的存在;

结构体模板:(等效于类模板)

template <class T>

struct name

{

  T data;

  name * next;

}

//初始化一个结点

name<int> a;

最后模板的使用体现形式;

//函数模板---使用体现:调用函数时传递的参数类型。template
<返回类型>
<函数名>
(参数表){ 函数体}//结构体模板---使用体现:声明结构元素时 StackNode
<类型>
s;template
struct StackNode{  struct T data;  struct StackNode
*next;};//类模板---使用体现:声明类对象时 Stack
<类型>
s;template
class Stack{ public:  T pop();  bool push(T e); private:  StackNode
*p;}template
//类模板外的 成员函数实现T Stack
::pop(){...}

 更高阶应用

转载于:https://www.cnblogs.com/flowingwind/p/8443849.html

你可能感兴趣的文章
使用Xshell密钥认证机制远程登录Linux
查看>>
OpenCV之响应鼠标(三):响应鼠标信息
查看>>
Android 画图之 Matrix(一)
查看>>
List<T>列表通用过滤模块设计
查看>>
【模板】最小生成树
查看>>
设计模式之结构型模式
查看>>
poj2569
查看>>
使用pygal_maps_world.i18n中数据画各大洲地图
查看>>
sql server必知多种日期函数时间格式转换
查看>>
jQuery EasyUI 的下拉选择combobox后台动态赋值
查看>>
timeline时间轴进度“群英荟萃”
查看>>
python if else elif statement
查看>>
网络编程
查看>>
文本隐藏(图片代替文字)
查看>>
java面试题
查看>>
提高码力专题(未完待续)
查看>>
pair的例子
查看>>
前端框架性能对比
查看>>
@property中 retain 详解
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>