64,688
社区成员
发帖
与我相关
我的任务
分享
#include <cstdio>
template<class Tp> class op;
template<class Tp> op<Tp>& operator<<(const Tp&, op<Tp>&);
template<class Tp> Tp operator<<(op<Tp>&, const Tp&);
template<class Tp>
class op
{
friend op<Tp>& operator<< <Tp>(const Tp&, op<Tp>&);
friend Tp operator<< <Tp>(op<Tp>&, const Tp&);
public:
explicit op(const char ch = '+'):m_data(), m_op(ch){}
private:
Tp m_data;
char m_op;
};
template<class Tp>
op<Tp>& operator<<(const Tp& data, op<Tp>& cls)
{
cls.m_data = data;
return cls;
}
template<class Tp>
Tp operator<<(op<Tp>& cls, const Tp& data)
{
Tp tmp;
switch(cls.m_op)
{
default:
cls.m_op = '+';
case '+':
tmp = cls.m_data + data;
break;
case '-':
tmp = cls.m_data - data;
break;
case '*':
tmp = cls.m_data * data;
break;
case '/':
tmp = cls.m_data / data;
break;
}
return tmp;
}
int main()
{
op<int> ch('+');
int a = 12;
int b = 2;
int i = a << ch << b;
printf("i = %d\n", i);
op<double> ch1; //默认即为'+'
double dou1 = 2.63;
double dou2 = 3.62;
double dou = dou1 << ch1 << dou2;
printf("dou = %.2f\n", dou);
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int a=1,b=2;
char c='+';
cout<<a<<c<<b<<'='<<a+b<<endl;
return 0;
}