初识C++:函数模板(一)

函数模板(一)(未完)

函数模板的作用不过是简化代码一种手段,利用模板化应用不同类型的参数,不仅应用于函数中,更提供了类模板,其次C++ 的标准库提供许多有用的函数大多结合了模板的观念,如STL以及IO Stream

1. 普通函数模板

模板函数

//交换a,b的值,利用模板函数可以任意类型a,b值
template<class T>
void Myswap(T& a, T& b) {                             //利用引用类型
	T temp;
	temp = a;
	a = b;
	b = temp;
}
int main() {
	int a  = 1, b = 2;
	Myswap(a, b);
	cout << "a:" << a << ",b:" << b << endl;
}

注意事项

  1. 若存在同名的函数,优先考虑普通函数
  2. 函数模板也可以像普通函数重载
  3. 如果函数模板可以更好匹配,则会选择模板函数

2.函数模板原理

首先生成函数模板,根据调用类型生成模板函数,然后再被调用
函数模板:

template<class T>
int Myadd(T& a, T& b) {
	return a + b;
}

模板函数:

//出现Myadd(int ,int)则会函数模板会被编译成
int Myadd(int a, int b) {
	return a + b;
}
//然后被调用

3.类模板

template<class T>
class Person
{
public:
	Person(T id,T age) {
		this->id = id;
		this->age = age;
	}
	void show() {
		cout << "id:" << id << ", age:" << age << endl;
	}
public:
	T id;
	T age;
};
int main() {
	Person<int> p(10,20);
	Person<double> p2(1.1,2.2);
	p.show();// 输出id:10, age:20
	p2.show();// 输出id:1.1, age:2.2
}

4.类模板派生普通类

template<class T>
class Father
{
public:
	Father(T id,T age) {
		this->id = id;
		this->age = age;
	}
	void show() {
		cout << "id:" << id << ", age:" << age << endl;
	}
public:
	T id;
	T age;
};
//声明父类模板类型为了编译分配内存空间
class Son : public Father<int>{};

5.类模板派生类模板

template<class T>
class Animal {
public:
	void ShowAge(T age) {
		cout <<"age = "<<age << endl;
	}
public:
	T age;
};
template<class T>
class Cat : public Animal<T> {};

你可能感兴趣的:(C++)