/*************************B.h*********************************************/
#if !defined(AFX_B_H__
#define AFX_B_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
template <typename T>
class B
{
public:
B();
virtual ~B();
void SetData(T nData);
private:
T m_nData;
};
template<typename T>
B<T>::B()
{
}
template<typename T>
B<T>::~B()
{
}
template<typename T>
void B<T>::SetData(T nData)
{
m_nData = nData;
}
//void B<int>::SetData(int nData);
#endif // !defined(AFX_B_H__
/*****************************B.cpp********************************/
#include "stdafx.h"
#include "B.h"
/*
void B<int>::SetData(int nData)
{
m_nData = nData;
}
*/
/**********************main.cpp**************************/
#include "stdafx.h"
#include <iostream.h>
#include "B.h"
//类模版
template<typename T>
class A
{
T m_nData;
public:
void SetData(T nData);
T GetData() const;
};
template<typename T>
void A<T>::SetData(T nData)
{
m_nData = nData;
}
template<typename T>
T A<T>::GetData() const
{
return m_nData;
}
int main(int argc, char* argv[])
{
//A -------> A<int>
//模版 -------> 类(类类型)
//类模版-------> 模版类
A<int> thea;
thea.SetData(10);
cout << thea.GetData() << endl;
//模版的定义放在头文件中
B<B<int> > theB; //类型名 B_B_INT
B<int> theC;
theB.SetData(theC);
return 0;
}