cc36a_demo-txwtech-c++_CppPrimer_函数模板

//cc36a_demo-txwtech-c++_CppPrimer_函数模板
//函数模板-》实例化-》函数
//模板形参,T就是形参
//template <typename T> //typename与class写法都可以-建议用这个,避免与类的class混淆
//template <class T>,这个<class T>与c++类的class没有关系
//调用什么类型-函数模板自动匹配函数的类型,自动变成相应类型

//3.顺序队列  //内部是数组--类模板
//4.链式队列   //内部是链表--类模板

//cc36a_demo-txwtech-c++_CppPrimer_函数模板
//函数模板-》实例化-》函数
//模板形参,T就是形参
//template <typename T> //typename与class写法都可以-建议用这个,避免与类的class混淆
//template <class T>,这个<class T>与c++类的class没有关系
//调用什么类型-函数模板自动匹配函数的类型,自动变成相应类型

//3.顺序队列  //内部是数组--类模板
//4.链式队列   //内部是链表--类模板
#include <iostream>
#include <string>
#include <fstream> //文件流
#include <sstream>//字符串流

using namespace std;
//int compare(const double &v1,const double &v2)
//{
//	if (v1 < v2) return -1;
//	if (v1 > v2) return 1;
//	return 0;
//}
//int compare(const string &v1, const string &v2)
//{
//	if (v1 < v2) return -1;
//	if (v1 > v2) return 1;
//	return 0;
//}


//用函数模板来写

//函数模板例子1
template <typename TT>//TT代表任意一种类型
int compare(const TT &v1, const TT &v2) //函数模板自动匹配函数的类型
{
	if (v1 < v2) return -1;
	if (v1 > v2) return 1;
	return 0;
}
//函数模板例子2
template <class T>
T absVal(T val)
{
	return val > 0 ? val : -val;
}
//函数模板例子3
template <typename T1, typename T2>
T1& print(T1& s,T2 val)
{
	s << val;
	return s;
}
//函数模板例子4
template <class T>
//严重性	代码	说明	项目	文件	行	禁止显示状态
//错误	C2440	“return” : 无法从“const T”转换为“T &”	cc36a_demo	c : \users\tt2018\documents\visual studio 2017\projects\cc36a_demo\cc36a_demo\cc36a_demo.cpp	54
//
//T& bigger(const T&v1, const T&v2)
const T& bigger(const T&v1, const T&v2) //添加一个const
{
	return v1 > v2 ? v1 : v2;
}

int main()
{
	double dval = -0.88;
	float fval = -12.33;

	string oristr = "this is a test";
	string desstr;
	ostringstream oss(desstr);//输出字符串流
	ofstream outFile("result.dat");//输出文件流

	print(cout, -3) << endl;
	print(cout, dval) << endl;
	print(cout, fval) << endl;
	print(cout, oristr) << endl;

	print(outFile, -3) << endl;//文件输出流
	print(outFile, dval) << endl;
	print(outFile, fval) << endl;
	print(outFile, oristr) << endl;
	outFile.close();

	print(oss, -3) << endl;
	print(oss, dval) << endl;
	print(oss, fval) << endl;
	print(oss, oristr) << endl;
	//oss.close();
	cout << oss.str() << endl; //oss输出

	cout << absVal(dval) << endl;//double类型
	cout << absVal(fval) << endl; //float类型
	double d1 = 1.23;
	double d2 = 9.51;
	cout << compare(d1, d2) << endl;
	string s1("zhi");
	string s2("world");
	cout << compare(s1, s2) << endl;

	//传引用
	double a = 1.22;
	double b = 6.89;
	cout << bigger(a,b) << endl;
	cout << bigger(s1, s2) << endl;

	
	getchar();
	return 0;
}
发布了356 篇原创文章 · 获赞 186 · 访问量 89万+

猜你喜欢

转载自blog.csdn.net/txwtech/article/details/104055444