在程式設計中往往尊在這樣的兩種情況,一種是兩個或多個函式的程式結構相同,區別僅在於其引數型別或函式返回型別不同;另一種是兩個或多個類的結構相同,差別僅在於部分類的成員的型別或成員函式的型別及引數的型別不同。不論哪種情況,其程式框架都基本相同,只是具體細節不同。
c++提供了模板機制,利用這一機制,可簡化程式**,實現軟體復用。c++有兩種模板型別:
(1)函式模板:是一種抽象通用的函式,用它可生成一批具體的函式。這些由函式模板經例項化生成的具體函式成為模板。
(2)類模板:是一種抽象通用的類,用它可生成一批具體的類。這些類模板經例項化生成的具體的類成為模板類。
下面通過乙個具體的例子來理解模板。
實驗內容:
根據已知的stack類
stack
-element[100]:t
-size:int
+stack()
+empty():bool
+peek():t
+push(value:t):void
+pop():t
+getsize():int
(1) 向stack類新增乙個例項函式printstack,以列印棧中所有元素。
(2) 為stack類新增乙個例項函式contains(t element),檢查給定元素是否在棧中。
源**stack.h
#include
using namespace std;
template
class stack
telement[100];
intsize;
public:
stack();
boolempty();
tpeek();
voidpush(t value);
tpop();
intgetsize();
voidprintstack();
bool contains(t element);
template
stack::stack()
size=0;
template
bool stack::empty()
if(size==0)
returntrue;
else
returnfalse;
template
int stack::getsize()
returnsize;
template
t stack::peek()
returnelement[size-1];
template
t stack::pop()
if(size<1)
cout<<"棧空!"size=size-1;
returnelement[size];
template
void stack::push(t value)
element[size]=value;
size++;
template
bool stack::contains(t element)
for(inti=0;i<100;i++)
if(element==this->element[i])
returntrue;
returnfalse;
template
void stack::printstack()
while(!empty())
cout#include
#include"stack.h"
using namespace std;
int main()
stackstack1;
for(int i=1;i<=10;i++)
stack1.push(i);
cout<<"棧中所有元素如下:"cout 1 實驗內容及目的 l 實驗目的 理解和掌握c 類和物件的模板。l 實驗內容 實現stack類,1 向stack類新增乙個例項函式printstack,以列印棧中所有元素 2 為stack類新增乙個例項函式contains t element 檢查給定元素是否在棧中。2 實驗步驟 1 實現類 l s... 用相同的類模板可以組建任何型別的物件集合。在傳統c 中,可能有乙個浮點數類或者乙個整數類,如果使用類模板,可以定義乙個對兩者都適用的類number。類模板說明 類模板說明的一般形式是 template 型別形參表 class 類名 template 型別形參表 返回型別 類名 型別名錶 成員函式1 ... 類模板的意義和函式模板的意義是一樣的。template 宣告乙個模板,虛擬型別名為t。注意 這裡沒有分號。class compare 類模板名為compare t max t min 不能這樣定義類模板中的成員函式而 應當寫成類模板的形式 template tcompare max compare ...掌握C 類和物件的模板
C 模板類和類模板
C 類模板和模板類