c++ 类模板编程
1.头文件
//单参数类模板
#ifndef _OPERATOR_H
#define _OPERATOR_H
#include<iostream>
using namespace std;
//单个参数函数模板
template < typename T >
class Operator
{
public:
T add(T a, T b);
T minus(T a, T b);
T multiply(T a, T b);
T divide(T a, T b);
};
//多个参数函数模板
template < typename T1,typename T2 >
class Operator_1
{
public:
void add(T1 a, T2 b);
};
//类模板特化-完全特化
template <>
class Operator_1< int , int>
{
public:
void add(int a, int b)
{
cout<<a+b<<endl;
}
};
//部分特化,当两个参数都是指针调用该参数
template < typename T1,typename T2 >
class Operator_1<T1*,T2*> //部分特化的类模板,当两个参数都是指针,调用这个
{
public:
void add(T1* a, T2* b)
{
cout<<"add(T1* a, T2* b)"<<endl;
cout<<*a+*b<<endl;
}
};
template < >
class Operator_1<void*,void*> //完全特化的类模板,当两个参数都是void*,调用这个
{
public:
void add(void* a, void* b)
{
cout<<"add(void* a, void* b)"<<endl;
cout<<"add void* Error"<<endl; //void*无法进行加法
}
};
template < typename T > //外部定义的成员函数,都需要加上模板声明
T Operator<T> :: add(T a, T b) //同时加上结构体<T>声明
{
return a+b;
}
template < typename T >
T Operator<T> :: minus(T a, T b)
{
return a-b;
}
template < typename T >
T Operator<T> :: multiply(T a, T b)
{
return a*b;
}
template < typename T >
T Operator<T> :: divide(T a, T b)
{
return a/b;
}
template < typename T1,typename T2 >
void Operator_1<T1,T2 > :: add(T1 a, T2 b)
{
cout<<a+b<<endl;
}
#endif
2.cpp文件
#include<string>
#include"Operator.h"
using namespace std;
string operator-(string &l,string r)
{
return "minus";
}
int main()
{
Operator<int> op1;
op1.add(1,2);
cout<<op1.add(1,2)<<endl;
Operator_1 <int ,float>op2;
op2.add(1,2);
Operator_1<int,int>op3;
op3.add(1000,2000);
int *p1 = new int(1);
float *p2 = new float(1.25);
Operator_1<int*,float*> Op4; //匹配部分特化的类模板:class Operator<T1*,T2*>
Op4.add(p1,p2);
Operator_1<void*,void*> Op5; //匹配完全特化的类模板:class Operator<void*,void*>
Op5.add(NULL,NULL);
delete p1;
delete p2;
return 0;
}
标签:
c++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY