【面向对象程序设计常见面试题】函数模板与类模板有什么区别?(44)

函数模板的实例化是由编译程序在处理函数调用时自动完成的,

而类模板的实例化必须由程序员在程序中显式地指定。


1、函数模板

声明

template <typename 类型参数>

返回类型 函数名(模板参数){函数体}

template <class 类型参数>

返回类型 函数名(模板参数){函数体}

使用

函数名(模板实参表)

模板函数可以重载

函数模板与同名的非模板函数可以重载,但是先调用非模板的函数,再调用模板函数

#include <iostream>
using namespace std;
 template <typename p1,typename p2>
 void two_p(p1 x,p2 y){
    cout<<x<<" "<<y<<endl;
 }
 int main()
 {
   two_p(56,"zhang");
   two_p(12.5,855);
   return 0;
 }




2、类模板

声明

template <typename 类型参数>

class 类名{类成员声明}

template <class 类型参数>

class 类名{类成员声明}

使用

类模板名 <实际类型名> 对象名

类模板名 <实际类型名> 对象名(实参表列)

函数类外定义

template <typename 类型函数>

函数类型 类名<类型参数>::成员函数名(形参表)

#include <iostream>
using namespace std;

template <typename T>
class Three{
public :
    Three(T a,T b,T c);
    T sum();
private:
    T x,y,z;
};

template <typename T>
Three<T>::Three(T a,T b,T c){
    x = a;
    y = b;
    z = c;
}

template <typename T>
T Three<T>::sum(){
    return x+y+z;
}
int main(){
  Three<int> sum3_1(3,5,7);
  Three<double> sum3_2(3.1,5.2,7.5);
  cout<<sum3_1.sum()<<endl;
  cout<<sum3_2.sum()<<endl;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值