C++类模板 之学习

首先声明:非原创!

 

来自:http://blog.csdn.net/nomad2/article/details/886503

1.定义语法:

template <模板参数表> class 类名 类体

注:

模板类型参数 typename id

模板非类型参数 例如: int n

类体中可以出现的类型有 a. 基本数据类型 b. 用户自定义类型 c. 模板类型参数 d. 类名

2.模板实例化

(1)从类模板生成具体类的过程

(2)时机:定义对象时; 指针或者引用解引用(*p)时;

(3)语法:

类模板名<实参表>

例:

Node <int> x;

Node <double> *p;//注意,此时不会实例化模板

示例程序:stack模板

#include "stdafx.h"
#include <iostream>
using namespace std;

template <typename T> class Stack;

template <typename T> class StackItem
{
public:
T info;
StackItem *next;

StackItem(T x)
{
  //cout << "StackItem constructor" << endl;
  info = x;
  next = NULL;
}

friend class Stack<T>;
};

template <typename T> class Stack
{
StackItem<T> * top;

public:
Stack()
{
  //cout << "Stack constructor" << endl;
  top = NULL;
}

void push(T x)
{
  StackItem<T> *p = new StackItem<T>(x);
  p->next = top;
  top = p;
}

T pop()
{
  if(top == NULL)
  {
   throw 1;
  }
  StackItem<T> * p = top;
  top = top->next;
  T x = p->info;
  delete p;
  return x;
}
};

void main()
{
Stack<double> a;
a.push(1.3);
a.push(9);
cout << a.pop() << endl;
cout << a.pop() << endl;
}

 

 

 

 

 

 

来自:http://blog.csdn.net/hangyu628/article/details/3868006

 

C++ 模板类定义与声明

声明和使用类模板: 如果在类模板外定义成员函数,应写成类模板形式:
template<class 虚拟类型参数>
函数类型 类模板名<虚拟类型参数>∷成员函数名(函数形参表列) {…}

测试的模板类,如下:
//Compare.h
#ifndef _COMPARE_H
#define _COMPARE_H

template <typename T>
class Compare
{
public:
~Compare(void);
Compare(T,T);
T max();
T min();
private:
T x;
T y;
};
#endif

 

 

//Compare.cpp
#include "Compare.h"

#include <iostream>
using namespace std;

 


template <typename T>
Compare<T>::Compare(T a,T b)
{
x=a;
y=b;
}
template <typename T>
Compare<T>::~Compare(void)
{
}
template <typename T>
T Compare<T>::max()
{
return (x>y)?x:y;
}
template <typename T>
T Compare<T>::min()
{
return (x<y)?x:y;
}
#include "Compare.h"
int main()
{
Compare<int> tt(1,2);
              cout<<tt.max()<<endl;
system("pause");
getchar();
return 0;
}

 

 

 

 

你可能感兴趣的:(C++,测试,null,delete,Class,Constructor)