編程類模板
『壹』 C++模板編程
template<class T, class U>
class TestH
{
public:
typedef enum PARAM
{
VALUE1 = 0 ,
VALUE2 = sizeof(T) ,
};
template<typename TP>
TP* GetVale(PARAM distance)
{
return (TP*)((char*)(this)+distance);
}
TestH(T t, U u)
: m_value1(t)
, m_value2(u)
{
}
private:
T m_value1;
U m_value2;
};
/// 使用:
TestH<int, char> obj(1, 'f');
int* a = obj.GetVale<int>(TestH<int, char>::VALUE1);
char* b = obj.GetVale<char>(TestH<int, char>::VALUE2);
『貳』 C++模板類編程
/*----------------Queue.h--------------------*/
#include "QueueItem.h"
template<class Type> class Queue
{
public:
Queue():head(0),tail(0){}
void push(const Type&);
void pop();
bool empty() const{return head==0;}
Type front();
~Queue(){destroy();}
private:
QueueItem<Type> *head;
QueueItem<Type> *tail;
void destroy();
};
template<class Type>
Type Queue<Type>::front()
{ return head->item;
}
template<class Type>
void Queue<Type>::push(const Type& m)
{ if(empty())head=tail=new QueueItem<Type>(m);
else{
tail->next=new QueueItem<Type>(m);
tail=tail->next;
}
}
template<class Type>
void Queue<Type>::pop()
{ if(empty())return;
QueueItem<Type> *p=head;
if(head->next)head=head->next;
else{head=0;tail=0;}
delete p;
}
template<class Type>
void Queue<Type>::destroy()
{ while(!empty())pop();
}
『叄』 c++編程中的模板和具體化
for(int i=0;i<num;i++)
a=a>B[i+1]?a:B[i+1];
這里的 B[i+1] 下標越界了,例如 cout<<maxn(num1,4)<<endl; 中,當 i=3 時,B[i+1] 越界,所以循環退出條件應該為 i<num-1。
同樣的,while(i<num) 也應該改為 while(i<num-1)
char * a=new char ; 這里的分配是不需要的,因為 a 被初始化後,緊接著就會在循環中被賦其他值,也就是說原來初始化時的那個指針丟失了。而函數返回後的 delete p 刪除的是 maxn 的返回值,也就是 str 中最長的那個字元串的地址,而這個地址是一個靜態字元串,是不能釋放的。
所以 char * a=new char; 改為 char* a = NULL;
緊接著的 a=B[0]; 刪除
程序最後的 delete p; 也要刪除。
『肆』 C++類模板編程
沒問題啊
如
//頭文件 cs.h
template <typename T>
class temp{
public:
temp();
temp(const temp&);
~temp();
void ok();
};
//cpp
int main(){
temp<int> tmp;
tmp.ok():
return 0;
}
template <typename T>
temp<T>::temp(){
cout<<"temp"<<endl;
}
template <typename T>
temp<T>::temp(const temp&){}
template <typename T>
temp<T>::~temp(){}
template <typename T>
void temp<T>::ok(){cout<<"OK"<<endl;}
『伍』 c++ 編程問題之模板類和模板函數
# include <iostream.h>
# include <assert.h>
template<class T>
class Stack{
public:
Stack(int size) {
this->size = size ;
stack = new T[this->size] ;
tos = -1 ;
}
~Stack() {
delete [] stack ;
}
void push(T data) {
assert(tos <=size-1) ;
++tos ;
stack[tos] = data ;
}
T pop() {
assert(tos >= 0) ;
return stack[tos--] ;
}
bool isFull(){
return tos >= size-1 ;
}
bool isEmpty(){
return tos < 0 ;
}
private:
T* stack;
int size ;
int tos ;
};
void main() {
Stack<int> stack(10) ;
for (int i = 0 ; i < 11 ; i++ ) {
if (!stack.isFull()){
stack.push(i) ;
}
}
for ( i = 0 ; i < 11 ; i++ ) {
if (!stack.isEmpty()){
cout << stack.pop() << " " ;
}
}
}
『陸』 c++編程 數組類模板
#include<iostream>
usingnamespacestd;
template<classT>
classArray
{
public:
Array<T>(){data=NULL;}
Array<T>(T*d,intn)
{
data=newT[n];
for(inti=0;i<n;i++)
data[i]=d[i];
len=n;
}
T&sum()
{
Tvalue=0;
for(inti=0;i<len;i++)
value+=data[i];
returnvalue;
}
doubleaverage()
{
return(double)sum()/len;
}
private:
T*data;
intlen;
};
voidmain()
{
inta[]={1,2,3,4,5};
doubleb[]={1.2,3.4,5.5,5.6,3.1};
Array<int>A(a,5);
Array<double>B(b,5);
cout<<A.sum()<<""<<A.average()<<endl;
cout<<B.sum()<<""<<B.average()<<endl;
}
『柒』 編程序創建一個類模板
鵬煊
千青
晟睿
『捌』 有用c語言編寫程序的模板嗎
開打易語言 在新建窗口中選擇 WINDOWS易語言模塊寫完後編譯出來的就是 .EC格式的易模塊文件
『玖』 C++的類模板如何編程並運行
//一個例子(可以用來保存任意類型、任意數量的元素的列表)
#include<iostream>
using namespace std;
template<typename T>
class list
{
public:
list(T* arr,int len)
{
capacity=len>0 ? 2*len : 32;
this->len=len;
this->arr=new T[capacity];
for(int i=0;i<len;i++)
this->arr[i]=arr[i];
}
list()
{
capacity=8;
len=0;
arr=new T[capacity];
}
~list()
{
delete [] arr;
}
void add(T e)
{
T *p;
if(len>=capacity)
{
capacity+=16;
p=new T[capacity];
for(int i=0;i<len;i++)
p[i]=arr[i];
delete [] arr;
arr=p;
}
arr[len++]=e;
}
void show() const
{
for(int i=0;i<len;i++)
cout<<arr[i]<<(i==len-1 ? "\n" : " ");
}
private:
T* arr;
int len,capacity;
};
int main()
{
string strs[]={"abc","de","okgood"};
list<int> l1;
list<string> l2(strs,3);
l1.show();
for(int i=0;i<10;i++)
{
l1.add(i);
l1.show();
}
//l1.add("abc");
l2.show();
//l2.add(1.1);
l2.add("end");
l2.show();
return 0;
}
『拾』 編程序創建一個類模板 用c++
// arrayex.h
#pragma once
#include <iostream>
using namespace std;
template <class T>
class CArrayEx
{
public:
// 構造函數,用固定值初始化
CArrayEx(T Initial,int nSize)
{
m_nSize=(nSize>1)?nSize:1;
m_pArray=new T[m_nSize];
for(int i=0;i<m_nSize;i++)
m_pArray[i]=Initial;
}
// 構造函數,用數組初始化
CArrayEx(T arr[], int nSize)
{
m_nSize=(nSize>1)?nSize:1;
m_pArray=new T[m_nSize];
for(int i=0;i<m_nSize;i++)
m_pArray[i]=arr[i];
}
// 計算數組的平均
T CalculateMean()
{
T sum = 0;
for(int i=0;i<m_nSize;i++)
sum +=m_pArray[i];
return (T)(sum/(double)m_nSize);
}
// 顯示數組
void Show(const int nNumElems)
{
for(int i=0;i<nNumElems;i++)
cout<<m_pArray[i]<<' ';
cout<<endl;
}
// 析構函數
virtual~CArrayEx(){delete[ ] m_pArray;}
// 重載[]操作符,實現取值或者更改原值
T &operator [](int nIndex){return m_pArray[nIndex];}
protected:
T* m_pArray;
int m_nSize;
};
// Test.cpp
#include "stdafx.h"
#include "ArrayEx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int arr[5]={1,2,3,4,5};
// CArrayEx<int> ar(0,5);
// 用數組進行構造
CArrayEx<int> ar(arr, 5);
ar.Show(5);
cout<<ar.CalculateMean()<<endl;
return 0;
}