菜鸟笔记
提升您的技术认知

c 模板-ag真人游戏

c 模板

  • 什么是模板
    • 书写的方式和作用
  • 函数模板
    • 案例一(模板与普通函数)
    • 案例二(模板与模板)
    • 函数模板缺省
    • 函数模板传常量
  • 模板的嵌套

模板编程也叫泛型编程,忽略数据类型的一种编程方式。

书写的方式和作用

模板的书写方式:
1.template
2.template

这里主要是讲诉函数模板重载的问题,以及调用情况的问题

案例一(模板与普通函数)

#include
#include
using namespace std;
template
//template
t1 max(t1 a, t1 b)
{
  
	cout << "调用函数模板" << endl;
	return a > b ? a : b;
}
int max(int a, int b)
{
  
	cout << "调用普通函数" << endl;
	return a > b ? a : b; 
}
int main()
{
  
	//编译器优先调用类型确定的函数
	cout << max(1, 2) << endl; //调用的普通函数 
	cout << max(1, 2) << endl; //调用函数模板(显式调用)
	system("pause");
	return 0;
}

案例二(模板与模板)

#include
using namespace std;
template
void print(t a, t b, t c)
{
  
	cout << "一个类型" << endl;
}
template
void print(t1 a, t1 b, t2 c)
{
  
	cout << "两个类型" << endl;
}
template
void print(t11 a, t22 b, t33 c)
{
  
	cout << "三个类型" << endl;
}
int main()
{
  
	print(1, 2, 3); //调用的第一个
	print(1, 2, "3"); //调用第二个
	print(1, 2.9, "3");//调用第三个
	print(1, 2, 3);  //传参类型少的先调用
	print(1, "1", "1");
	system("pause");
	return 0;
}

函数模板缺省

函数模板缺省跟函数缺省规则一样,都是从右往左缺省

#include
using namespace std;
template
int main()
{
  
	system("pause");
	return 0;
}

函数模板传常量

函数模板里写常量,在传参的时候,也应该传常量,而不是变量。

#include
#include
using namespace std;
class mm
{
  
public:
	mm (){
  }
	mm(int age, string name) : age(age), name(name) {
  }
private:
	int age;
	string name;
};
template
void print(t date)
{
  
	cout << date << endl;
}
int main()
{
  
	mm mm(10,"温柔了岁月");
	print(mm);
	system("pause");
	return 0;
}

如图所示,不能够直接打印出,要使用运算法重载,打印自定义类型

#include
#include
#include
using namespace std;
class mm
{
  
public:
	mm() {
  }
	mm(int age, string name) : age(age), name(name) {
  }
	friend ostream& operator << (ostream & out,mm & object)
	{
  
		out << object.age << setw(5) << object.name << endl;
		return out;
	}
private:
	int age;
	string name;
};
template
void print(t date)
{
  
	cout << date << endl;
}
int main()
{
  
	mm mm(10,"温柔了岁月");
	print(mm);
	system("pause");
	return 0;
}

将一个类名,当做模板的一个类型

#include
#include
#include
using namespace std;
class mm
{
  
public:
	mm() {
  }
	mm(int age, string name) : age(age), name(name) {
  }
	friend ostream& operator << (ostream& out, mm& object)
	{
  
		out << object.age << setw(5) << object.name << endl;
		return out;
	}
private:
	int age;
	string name;
};
template
class mm1
{
  
public:
	mm1(t1 a, t2 b, t3 c): a(a), b(b), c(c) {
  }
	void printdate()
	{
  
		cout << a << b << c << endl;
	}
private:
	t1 a;
	t2 b;
	t3 c;
};
int main()
{
  
	mm1 mm(mm(19,"ni"),90,90); //mm这个类,当做模板的类型,所传的参数要与之相对应
	mm.printdate(); //因为在mm那个类中写了运算符重载,所以这里不不要写运算符重载
	system("pause");
	return 0;
}

这里用的是类的模板嵌套
注意的是:这里类名时候,必须要、
类名<类型>的形式

#include
#include
using namespace std;
template
class mm
{
  
public:
	mm(t1 a, t2 b): a(a),b(b) {
  }
private:
	t1 a;
	t2 b;
};
template
class mm
{
  
public:
	mm(t c): c(c) {
  }
private:
	t c;
};
int main()
{
  
	mm mm1(1,2);
	mm mm2(1);
 
	mm, mm> mm3(mm(1), mm(2));  //嵌套
	//可以通过起别名的方式,是代码变得简洁;
	using type = mm;
	mm mm5(type(1), type(3));
	//如果要打印的话,自然还是要是使用运算符重载
	system("pause");
	return 0;
}
网站地图