运算符的问题

zyqde_0802 2010-03-18 05:24:47
#include <iostream>
#include <conio.h>

int main()
{
int a=12;
int b=2;
char ch='+';
int i=a<<ch<<b;

printf("%d\n",i);

getch();
return 0;
}

想用字符ch来代替算术运算符,但是这样有问题,那位大侠可给指点一下,先谢过了..................
...全文
110 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyqde_0802 2010-03-19
  • 打赏
  • 举报
回复
有解决的办法吗?想实现a+b,加号用char来表示
耍宝王 2010-03-18
  • 打赏
  • 举报
回复
LZ的想法的确很有创意,看过之后试着写了一下
#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;
}

以上代码只对内置类型有效
试验品BUG较多,仅供探讨
cattycat 2010-03-18
  • 打赏
  • 举报
回复
你那个最多输出12+2,不会输出14的。这个不是运算符重载。
Julykey 2010-03-18
  • 打赏
  • 举报
回复
强大,这也不是单纯的运算符重载,帮顶了,求高手
jansonleader 2010-03-18
  • 打赏
  • 举报
回复
--------------------------
#define PLUS +
...
i = a PLUS b;
--------------------------
ubuntu测试成功。

不知道楼主满意吗?
senr0816 2010-03-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 freezezdj 的回复:]

int i=a<<ch<<b;
楼主明白它的意思吗?

如果我没猜错的话:
ch<<b; // ch右移b次。
a<<ch<<b // a右移"ch右移b次的到的值次"。
然后赋值给i。


。。。。
[/Quote]
同意,lz有些想当然了
senr0816 2010-03-18
  • 打赏
  • 举报
回复
显然不行。。。
你去看下“标准输入输出流”和运算符重载~
rome55 2010-03-18
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int main()
{
int a=1,b=2;
char c='+';
cout<<a<<c<<b<<'='<<a+b<<endl;
return 0;
}
冻结 2010-03-18
  • 打赏
  • 举报
回复
int i=a<<ch<<b;
楼主明白它的意思吗?

如果我没猜错的话:
ch<<b; // ch右移b次。
a<<ch<<b // a右移"ch右移b次的到的值次"。
然后赋值给i。


。。。。
zyqde_0802 2010-03-18
  • 打赏
  • 举报
回复
得到14,在VC6.0上不行
zyqde_0802 2010-03-18
  • 打赏
  • 举报
回复
....................每一个给解答一下吗
senr0816 2010-03-18
  • 打赏
  • 举报
回复
int i=a<<ch<<b;
你想达到什么样的效果?
zyqde_0802 2010-03-18
  • 打赏
  • 举报
回复
就是用ch来代替‘+’,很难理解吗?
rome55 2010-03-18
  • 打赏
  • 举报
回复
int i=a<<ch<<b; //这个不用定义 多余
冻结 2010-03-18
  • 打赏
  • 举报
回复
楼主省着点用分。
80不值。

楼主的问题把我弄糊涂了。
重新叙述一遍吧。
不太明白。
w0911h 2010-03-18
  • 打赏
  • 举报
回复
你这用法还真有创意。。。

64,688

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧