从没正儿八经用过C++,最近看人家的一个嵌入程序代码,
看不懂啊。。。求高人废神,帮我解释下这段代码。
template<typename T, size_t N>
class Container
{
private:
size_t m_iCnt;
T m_Data[N];
public:
Container(){m_iCnt = 0;};
~Container(){};
bool Push(T& In)
{
for(size_t i = 0; i < m_iCnt; i++)
{
if(In == m_Data[i])
return false;
}
if(m_iCnt < N)
{
m_Data[m_iCnt] = In;
m_iCnt++;
return true;
}else
return false;
};
bool Pop(T& Out)
{
if(m_iCnt > 0)
{
m_iCnt--;
Out = m_Data[m_iCnt];
return true;
}else
return false;
};
bool IsEmpty(void)
{
return 0==m_iCnt;
};
bool IsFull(void)
{
return N==m_iCnt;
};
size_t Count()
{
return m_iCnt;
};
};
template<typename T, size_t N> //定义模版,及常说的泛型
class Container
{
private:
size_t m_iCnt;//游标
T m_Data[N];//长度为N 的数组
public:
Container()
{
m_iCnt = 0;//构造函数
};
~Container() {};//析构函数,它会在每次删除所创建的对象时执行
bool Push(T& In)//入栈
{
for(size_t i = 0; i < m_iCnt; i++)//已存在则不入栈
{
if(In == m_Data[i])
return false;
}
if(m_iCnt < N)
{
m_Data[m_iCnt] = In;
m_iCnt++;
return true;
}
else
return false;
};
bool Pop(T& Out)//出栈
{
if(m_iCnt > 0)
{
m_iCnt--;
Out = m_Data[m_iCnt];
return true;
}
else
return false;
};
bool IsEmpty(void)//判空
{
return 0 == m_iCnt;
};
bool IsFull(void)//判满
{
return N == m_iCnt;
};
size_t Count()//当前长度
{
return m_iCnt;
};
};
特殊的栈.
每个函数的逻辑代码没什么好解释的吧。
重点是 template ,首先你忽略这行代码。这叫模板,只理解代码你不需要管。
你只要知道“T”是一个数据类型,“N”是一个整数表示个数。
你可以简单认为T是int,N是100。这段代码就是说这个容器里最多可以容纳100个int型整数,相当于 int a[100];
最后:模板的目的是你可以让这个容器存放其他类型数据,比如T是char型,N是26个。 T是一个自己写的结构类型,N是5个啊什么的。