C++笔记_04C++模版1

#include<iostream>


using namespace std;


/*
oop三大特征
封装  继承 多态
第二部分  模版
《C++ templates》
1.函数模版
2.类模板




需要搞清楚的知识点


函数模版
模版的实例化,(显示, 隐式)
模版函数
模版的实参推演


模版类型参数
模版的非类型参数




模版的特例化(专用化)
模版函数的重载
*/




/*
int sum(int a,int b);  a,b 实参的值进行参数化
模版就是将类型也进行参数化


*/




/*


*1*模版的代码内容实例化之前不进行编译
*2*因为1 ,所以当它没有任何的实例化(也就是没有产生任何函数),所以,对于模版的代码不能写到头文件里,
所以,在模版的调用处,一定要看到模版的定义处,光声明不可以
想在头文件里写,就必须显示实例化




*/
//语法:定义模版的参数列表    可定义   类型参数/非类型参数  class/typename
//template<class CT>      //类类型
//template<typename T>   //非类类型参数
//template<typename T1,typename T2>//可定义多个,一般都是大写




#if 1


/*
类模版
链表
*/


//前向声明
template<typename T>
class CLink;




//类模版 除了构造和析构函数的名字 可以省略参数列表(模版的参数列表<typename T>),其他地方不能省略
template<typename T>  //Node<int>
class Node
{
public:
typedef int T;
Node(T data = T()):_data(data),_pnext(NULL){};
private:
T _data;
Node<T> *_pnext;


//template<typename T>    //CLink<int> CLink<char>  CLink<int *> 
//friend class CLink;
friend class CLink<T>;//声明模版CLink,,T特例化,,要是用这个得在前面进行前向声明
};
//可以看出,不同模版的参数名可以用在不同模版出,也就是相同的模版参数名,不在同一作用域处就可以重名








template<typename T=int>
class CLink
{
public:
CLink()
{
_phead = new Node<T>();
}


~CLink()
{
Node<T> *pcur = _phead;
while(pcur != NULL)
{
_phead = _phead->_pnext;
delete pcur;
pcur = _phead;
}
}


void insertHead(const T &val);


void show()
{
Node<T> *pcur = _phead->_pnext;
while(pcur!=NULL)
{
cout<<pcur->_data<<" ";
<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值