ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++ 类模板编程

2022-03-09 12:01:46  阅读:156  来源: 互联网

标签:int void 编程 c++ typename add Operator 模板


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;
}

标签:int,void,编程,c++,typename,add,Operator,模板
来源: https://www.cnblogs.com/codeAndlearn/p/15984480.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有