C++类模板

1、类模板、类模板中含有成员模板

首先看例子:

test.h文件

#ifndef TEST_H
#define TEST_H

//定义类模板基类,还是普通类的成员模板?
template<typename T>
class baseclass {
public:
	baseclass(){};
	~baseclass(){};
	void setA(T n);
	T getA();
	template<typename TT> void print(TT n);
public:
	T a;
};

#endif//TEST_H
test.cpp文件

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

template<typename T>
template<typename TT>
void baseclass<T>::print(TT n)
{
	cout << "类模板的成员模板:" << n << endl;
}
template<typename T>
void baseclass<T>::setA(T n)
{
	a = n;
}
template<typename T>
T baseclass<T>::getA()
{
	return a;
}
main.cpp文件(实现类模板对象)

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

int _tmain(int argc, _TCHAR* argv[])
{
	baseclass<int> base1;
	base1.setA(10);
	cout << base1.a << endl;
	cout << base1.getA() << endl;
	base1.print(10);
	baseclass<string> base2;
	base2.setA("hello");
	cout << base2.getA() << endl;
	base2.print(1000);//访问类模板的成员模板,不用特地去显示的指出成员模板类型,会自己识别
	base2.print("world");
	return 0;
}


在main.cpp中如果不include"test.cpp"会报错:

error LNK2019: 无法解析的外部符号 "public: void __thiscall baseclass<int>::setA(int)" (?setA@?$baseclass@H@@QAEXH@Z),该符号在函数 _wmain 中被引用 F:\ProjectBackup\VS2016Project\0511\0511\0511.obj 0511

据说还有种解决方法是添加进虚拟目录(还不知道什么意思……)

2、类模板的继承和派生

假设继承基类baseclass,在派生类的继承列表中一定要指定基类的类模板类型

class derivedclass : public baseclass<int>{
public:
	derivedclass(int size):size(size){};
	~derivedclass(){};
	void setb(int b)
	{
		this->b = b;
	}
private:
	int b;
	const int size;
};
实例化这样的派生类,语法与一般派生类无差。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值