C++ - 类模板

类模板

人们需要编写多个形式和功能都相似的函数,因此有了函数模板来减少重复劳动;人们也需要编写多个形式和功能都相似的类,于是 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");
}

猜你喜欢

转载自blog.csdn.net/weixin_43791961/article/details/111212951