C++模板的要点

1.函数模板与普通函数的区别:

普通函数可以进行自动类型转化,而函数模板不可以。

举个例子

//函数模板

template<class T>
void show(T  a,T b){
         cout<<a*b<<endl;
}

//执行

show(1,'a');//编译器报错
//普通函数

void show(int a,int b){
       cout<<a*b<<endl;
}

//执行

show(1,'a'); //编译成功  执行后显示97

虽然函数模板可以自动识别类型,但是一旦识别之后,后面的T都必须替换成第一个类型,而且不可以进行强制类型转换。

但是普通函数,虽然指定好了数据类型,但是可以进行强制类型转换

2.类模板和函数模板调用的区别

函数模板不需要显式指定类型就可以调用,但是类模板必须显式指定数据类型才可以调用

//假设定义了一个类模板 Person

Person<int> p(10);

//假设定义了一个函数模板 saying

saying a(10); //函数模板不需要显式指定数据类型,因为可以自动识别

3.基类为模板类的派生类怎么写?

必须要显式指定基类的数据类型

//基类
template <class T>
class Foundation{
    T size;
public:
    Foundation(T s):(size(s));
}

//派生类
class Ki:public Foundation<int>{ //必须要显式指定 不然编译器不知道如何分配内存
public:    
  Ki(int a):Foundation(a);
}

4.类模板较为规范的写法

一个类Person

应当在Person.h中定义类模板,声明模板内函数。

而函数在Person.hpp中实现

5.类模板中的友元函数该如何写?

https://www.cnblogs.com/kiik/p/how_to_coding_friend_function_in_cpp_template_class.html

原文地址:https://www.cnblogs.com/kiik/p/10696972.html