编程类模板
‘壹’ 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;
}