栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++基础知识 - 类模板函数写在类的外部

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++基础知识 - 类模板函数写在类的外部

1. 所有的类模板函数写在类的外部,在一个cpp中
#include 
#include 
using namespace std;

template 
class Demo {
public:
	Demo(T data = 0);	//构造函数
	Demo operator+(const Demo& other);	//对象的data相加,返回一个对象
	T getData() const;	//获取data
private:
	T data;
};

//在类的实现文件里,需要声名类模板
template 
//类的作用域前添加
Demo::Demo(T data) {
	this->data = data;
}

template 
//类的返回值,类的作用域,类的形参都需要添加模板声明
Demo Demo::operator+(const Demo& other) {
	Demo tmp;
	tmp.data = (this->data + other.data);
	return tmp;
}

template 
T Demo::getData() const {
	return this->data;
}


int main(void) {
	Demo d1(100), d2(200);

	Demo tmp = d1 + d2;

	cout << tmp.getData() << endl;

	system("pause");
	return 0;
}
总结:

在同一个cpp 文件中把模板类的成员函数放到类的外部,需要注意以下几点

函数前声明 template <类型形式参数表>类的成员函数前的类限定域说明必须要带上虚拟参数列表返回的变量是模板类的对象时必须带上虚拟参数列表成员函数参数中出现模板类的对象时必须带上虚拟参数列表成员函数内部没有限定

 
 

2. 所有的类模板函数写在类的外部,在不同的.h和.cpp中

需要在类模板时 包含#include “Demo.cpp” //需要包含类的实现.cpp文件

Demo.h

#pragma once

template 
class Demo{
public:
	Demo(T data = 0);	//构造函数
	Demo operator+(const Demo& other);	//对象的data相加,返回一个对象
	T getData() const;	//获取data
private:
	T data;
};

Demo.cpp

#include "Demo.h"

//在类的实现文件里,需要声名类模板
template 
//类的作用域前添加
Demo::Demo(T data){
	this->data = data;
}

template 
//类的返回值,类的作用域,类的形参都需要添加模板声明
Demo Demo::operator+(const Demo& other){
	Demo tmp;
	tmp.data = (this->data + other.data);
	return tmp;
}

template 
T Demo::getData() const{
	return this->data;
}

main.cpp

#include 
#include 
#include "Demo.cpp"	//需要包含类的实现.cpp文件
#include "Demo.h"
using namespace std;

int main(void) {
	Demo d1(100), d2(200);

	Demo tmp = d1 + d2;

	cout << tmp.getData() << endl;

	system("pause");
	return 0;
}
注意:

当类模板的声明(.h文件)和实现(.cpp 或.hpp文件)完全分离,因为类模板的特殊实现,我们应在使用类模板时使用#include 包含 实现部分的.cpp 或.hpp文件。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/744100.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号