C++模板

1,函数模板和普通函数的区别

  1. 普通函数可以进行自动类型转换
  2. 函数模板不允许自动类型转换
template <typename T>
T swapMy(T& a, T& b)
{
	return a+b;
}
int MySwap(int a, int b)
{
	return a + b;
}

void main()
{
	string a = "hello";
	string b = "world";
	cout << "a = " << swapMy(a, b) << endl;
	int aa = 100;
	int bb = 89898989;
	cout << "a = " << swapMy(aa, bb) << endl;

	char c = 'h';
	cout << "MySwap = " << MySwap(aa, c) << endl;

}

2,函数模板和普通函数一起调用规则

  1. 函数模板可以像普通函数那样重载
  • List item
  1. 两函数重名,C++编译器优先考虑普通函数,普通函数不匹配了再去调用模板
  2. 可以通过空模板实参列表的语法限定编译器智能通过模板匹配。
MySwap<>(aa,c);

3,C编译过程

在这里插入图片描述

4,类模板

template<class T>
class MyBase
{
public:
	MyBase(T a, T b)
	{
		this->a = a;
		this->b = b;
	}
	T add()
	{
		return this->a + this->b;
	}
public:
	T a;
	T b;
};

void main()
{
	MyBase<int> base(43, 43);
	cout << "add = " << base.add();
}

函数模板使用时,可以自动类型推导,类模板必须显示调用类型

{
	MyBase<int> base(43, 43);
	cout << "add = " << base.add();
}

5,类模板派生普通类

template<class T>
class MyBase
{
public:
};

//编译时需要分配内存
class MySon :public MyBase<int>
{

};

派生普通类的时候,要定义类型,否则编译的时候不知道需要分配多少的内存。

6,防止头文件复用

C:

#ifndef XXX_H  //Ctrl + shift +u转为大写
#define XXX_H

#endif

C++:

#pragma once    //防止头文件被重复包含

7,类模板类内实现

template<typename T1, typename T2>
class A
{
public:
	A(T1 a, T2 b)
	{
		as = a;
		ad = b;
	}

	void showTest()
	{
		cout << "as = " << as << endl;
		cout << "ad = " << ad << endl;
	}
public:
	T1 as;
	T2 ad;
};

void main()
{
	A<int, int> aa(13, 456);
	aa.showTest();
}

8,类模板类外实现

template<typename T1, typename T2>
class AA
{
public:
	AA(T1 a, T2 b)
	{
		as = a;
		ad = b;
	}

	void showTest()
	{
		cout << "as = " << as << endl;
		cout << "ad = " << ad << endl;
	}

	void test();

public:
	T1 as;
	T2 ad;
};

//实现部分注意事项
template<typename T1, typename T2>
void AA<T1, T2>::test()
{
	cout << "as = " << as << endl;
	cout << "ad = " << ad << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值