首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

操作符重载的有关问题

2012-03-01 
操作符重载的问题[codeC/C++][/code]#include iostreamusing namespace stdclass a{public:int operat

操作符重载的问题
[code=C/C++][/code]#include <iostream>
using namespace std;
class a
{
public:
int operator + (int a1 , int a2 , int a3)
{
int g=a1+a2+a3;//这个编译有错 不知道为什么, 
return g;//就是形参列表里面不止1个
}
   
};

[code=C/C++][/code]
#include <iostream>
using namespace std;
class a
{
public:
int operator + (int a1)
{
int g=a1;//这个形参列表里面只有1个 编译就通过了 为什么呢
return g;
}
   
};

[解决办法]
操作符重载是有固定形式的。一般隐藏左操作数类型,(左操作数就是该类型本身),对于+, 你在括号里只能写一个参数,就是右操作数```。你弄那么多参数,编译器晕了。
[解决办法]
//+是二元操作符,你想用来实现三元的操作,没办法
//你先想下如果你的是合法的,你怎么使用?
[解决办法]
三个参数,我倒。。。

另外,搂主参数表里是不是想传a类型阿

[解决办法]
操作符重载不能改变参数个数,不能改变优先级,内置类型的操作符不能重载,你的代码能犯的错误基本都有了o(∩_∩)o...哈哈
第一个错误就是参数个数不对拉,个数对类型也不对哈。
第二个正确是因为那个是一元+,不是二元滴
[解决办法]
奇怪咯,一元操作符可以在内置类型重载???
[解决办法]
哈哈,想起来了,成员函数有个隐含滴类类型参数,所以第二个是正确地。
[解决办法]
对大部分操作符而言,操作符重载有两种,成员函数的和全局函数的。
比如operator + ,可以这样定义:

a operator + (const a&,const a&)
{
// ....
}

也可以这样定义 

class a
{
public:
a operator + (const a&);
};

以上两者是等价的,只能定义其中之一(否则有二义性)。成员函数只需定义一个参数,因为另一个就是*this,类似这样:
a1 + a2 等价于 a1.operator+(a2); 等价于 operator+(a1, a2);

所以,对于
int a::operator+(int a1) ,并不是完全的内置类型重载,因为它对应的是 a + int 。
此外,操作符重载的返回类型是任意的,所以返回int并没有问题。但是,对于 a + a 的情况,返回a是合适的,因为这做到了与内建类型的行为一致。
[解决办法]
运算符重载的参数个数是固定的。
在类成员中,隐含了一个参数,所以需要少写一个。
二元有两个参数,一元有一个参数。

() 的重载参数个数并没有固定。
[解决办法]
问题大家都帮你解决了。
我纯粹是路过接分的!!!!!!!1

热点排行