类模板
人们需要编写多个形式和功能都相似的函数,因此有了函数模板来减少重复劳动;人们也需要编写多个形式和功能都相似的类,于是 C++ 引人了类模板的概念,编译器从类模板可以自动生成多个类,避免了程序员的重复劳动。
基础语法
#include <iostream>
using namespace std;
//类模板的创建
template<typename T>
class A
{
public:
A()
{
;
}
T GetA()
{
return a;
}
T SetA(T a)
{
this->a = a;
return a;
}
private:
T a;
protected:
};
void Print(A<int> *p)
{
printf("%d\n", p->GetA());
}
class B : public A<int>
{
public:
int GetB();
int SetB();
protected:
private:
int b;
};
class C : public A<int>
{
public:
C(int x, int y)
{
this->c = x;
}
int GetC();
int SetC();
protected:
private:
int c;
};
void main()
{
A<int> a1;
A<char> a2;
/*
a1.SetA(100);
cout << a1.GetA() << endl;
a2.SetA('A');
printf("%c\n", a2.GetA());
a1.SetA(100);
Print(&a1);
*/
C c(10,20);
system("pause");
}
类模板与友元
类模板中可以声明各种友元关系:
- 一个函数或函数模板可以是类或类模板的友元
- 一个类或类模板可以是类或类模板的友元类
#include <iostream>
using namespace std;
template <class T>
class Complex
{
public:
Complex(T Real = 0, T Image = 0);
private:
T Real, Image;
};
template <class T>
Complex<T>::Complex(T Real, T Image)
{
this->Real = Real;
this->Image = Image;
}
void main()
{
Complex<int> c1(10, 20);
Complex<float> c2(10, 20);
Complex<double> c3(10, 20);
system("pause");
}
类模板与static成员
#include <iostream>
using namespace std;
template<typename T>
class A
{
public:
static int m_a;
private:
T a1;
};
template<typename T>
int A<T>::m_a = 0;
int main()
{
A<int> a1;
A<int> a2;
A<int> a3;
a1.m_a++;
a3.m_a = 101;
a3.m_a++;
A<char> c1;
A<char> c2;
A<char> c3;
cout << a3.m_a << endl;
system("pause");
}