码迷,mamicode.com
首页 > 其他好文 > 详细

类模版的注意事项

时间:2015-07-03 14:11:27      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:   c++   类模版   

demo 1

#include <iostream>
#include <cstdio>
using namespace std;

// 模板类
template <typename T>
class A
{
public:
	A(T a = 0) {
		this->a = a;
	}
	
	void printA()
	{
		cout << "a: " << a << endl;
	}
private:
	T a;
};

// 从模板类


// C++编译器要求具体的类,所以要写成A<int> &a,千万别忘了<int>
void useA(A<int> &a)
{
	a.printA();
}

int main()
{
	// 模板类(本身就是类型化的)=>具体的类=>定义具体的变量
	A<int> a1(11), a2(20), a3(30); // 模版是抽象的 => 需要给出具体类型
	//a1.printA();


	return 0;
}

demo 2

#include <iostream>
#include <cstdio>
using namespace std;

// 模板类
template <typename T>
class A
{
public:
	A(T a = 0) {
		this->a = a;
	}
	
	void printA()
	{
		cout << "a: " << a << endl;
	}
protected:
	T a;
};

// 从模板类派生的普通类
// 模板类派生时,需要具体化模板类,C++编译器需要知道,父类的数据类型是什么样子的
// 要知道父类所占的内存大小是多少,只有数据类型固定下来,才知道如何分配内存
class B : public A<int>
{
public:
	B(int a = 10, int b = 20) : A<int>(a)
	{
		this->b = b;
	}

	void printB()
	{
		cout << "a: " << a << "\nb: " << b << endl;
	}

private:
	int b;
};

// 从模板类派生模板类
template <typename T>
class C : public A < T >
{
public:
	C(T c, T a) : A<T>(a)
	{
		this->c = c;
	}
	void printC()
	{
		cout << "a: " << a << "\nc: " << c << endl;
	}
private:
	T c;
};

int main()
{
	C<int> c1(10, 20);
	c1.printC();
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

类模版的注意事项

标签:   c++   类模版   

原文地址:http://blog.csdn.net/zyq522376829/article/details/46738257

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!