linyawen

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  276 随笔 :: 0 文章 :: 29 评论 :: 74万 阅读

1,函数模板

#include "stdafx.h"
#include <iostream>

template <typename T>//加法函数模板
T Add(T x,T y)//二元
{
std::cout<<"调用模板函数:";
return x+y;
}

template <typename T>//重载加法函数模板
T Add(T x,T y,T z)//三元
{
std::cout<<"调用重载模板函数:";
return x+y+z;
}


int main_19()
{
double x1=10.10,y1=10.10;
std::cout<<Add(x1,y1)<<std::endl;//调用模板函数
//相当于调用函数double Add(double,double)
std::cout<<Add(x1,y1,y1)<<std::endl;//调用重载模板函数
//相当于调用函数double Add(double,double,double)

return0;
}

2,类模板

#include "stdafx.h"
#include <iostream>
#include <string>

template <typename T>//在类模板定义之前,都需要加上模板声明
class BinaryOperation//二目运算类
{
private:
T x;
T y;
char op;
void add()
{
std::cout<<x<<op<<y<<"="<<x+y<<std::endl;
}
void sub()
{
std::cout<<x<<op<<y<<"="<<x-y<<std::endl;
}
void mul();
void div();
public:
BinaryOperation(T x,T y):x(x),y(y)
{
}
void determineOp(char op);
};


//在类外定义成员函数:
//在成员函数定义之前进行模板声明,
//且在成员函数名之前加上"类名<类型参数>::"
template <typename T>
void BinaryOperation <typename T>::mul()
{
std::cout<<x<<op<<y<<"="<<x*y<<std::endl;
}

template <typename T>
void BinaryOperation <typename T>::div()
{

std::cout<<x<<op<<y<<"="<<x/y<<std::endl;
}

template <typename T>
void BinaryOperation <typename T>::determineOp(char op)
{
this->op=op;
switch(op)
{
case'+':
add();
break;
case'-':
sub();
break;
case'*':
mul();
break;
case'/':
div();
break;
default:
break;
}
}

int main()
{

BinaryOperation<int> op(10,10);
op.determineOp('+');
op.determineOp('-');
op.determineOp('*');
op.determineOp('/');

return0;
}

posted on   linyawen  阅读(196)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用
历史上的今天:
2010-12-14 TAdvStringGrid控件使用技巧[转]
点击右上角即可分享
微信分享提示