运算符重载规则问题
发布网友
发布时间:2022-05-01 12:50
我来回答
共2个回答
热心网友
时间:2023-10-13 08:14
如果声明改为:
Oprea operator+(Oprea);
定义改为:
Oprea Oprea::operator+(Oprea c2)
{
Oprea temp;
temp.real=c2.real+real;
temp.imag=c2.imag+imag;
return temp;
}
也就是去掉c2的引用,采用传址,你的2个用法就都可以了。
你的+操作符要求右值是一个引用,c1可以作为引用参数,所以c3=Oprea(3,0)+c1;是通过的。
Oprea(3,0);只是一个临时量,不能作为右值,不具备引用的基本特性,所以c3=c1+Oprea(3,0); 不行。
去掉c2的引用,则+的右值只需要是一个Oprea实例。你的2种使用就都可以。
看你需要怎么用了。
引用参数,能避免传参时对类实例的重新构造。当然,指针参数也能达到一样的效果。
热心网友
时间:2023-10-13 08:15
两个都可以,编译出错了???
操作符重载有什么限制啊?
4 重载不能改变运算符的优先级。5 重载不能改变运算符的结合律。6 重载不能改变运算符操作数的个数。比如+需要两个操作数,则重载的+也必须要有两个操作数。
下列有关运算符重载的叙述中,正确的是( )。
重载运算符的规则如下:①c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重载;②c++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用...
运算符重载的原则是什么?
1、重载后的操作符,必须至少有一个操作数是用户定义的类型。2、不能违反操作符的句法规则,比如用“+”计算两个对象的差。3、不能定义新的操作符,要使用原有的。4、有一些操作符是不能重载的,但是绝大部分的算术运算符和逻辑运算符都可以重载。
C/C++重载运算符operator
重载运算符时,需注意参数限制,二元运算符必须有明确的左右操作数,不能像函数那样自由设置参数。比如,自增自减操作符有前缀和后缀形式,前缀调用operator++(),后缀调用operator++(int)。一元操作符如->、*等,重载时通常无参数,而二元操作符如+、-则需要一个对象作为参数。像输入输出运算符(如ist...
重载一个函数的条件是什么
也增强了程序的可读性。C++运算符重载的相关规定如下:不能改变运算符的优先级;不能改变运算符的结合型;默认参数不能和重载的运算符一起使用;不能改变运算符的操作数的个数;不能创建新的运算符,只有已有运算符可以被重载;运算符作用于C++内部提供的数据类型时,原来含义保持不变。
C++中?:运算符为什么不能重载?
比如+需要两个操作数,则重载的+也必须要有两个操作数。可看到,c++之所以不允许重载?:运算符,是考虑到?:运算符的条件特性。运算符的重载实质是函数的调用 比如 A?B:C 假设重载函数原型 operator ?: (A,B,C)那么,其跳转性质就不复存在了。举例说明:int a=0,b=0;bool p = true;p?
c++运算符重载的调用的具体规则是怎样的?谢谢
1.c++中的运算符除了少数几个(如:类属关系运算符 . ,成员指针运算符 .* ,作用域分辨符 ::, 三目运算符 ?:等吧)外,全部可以重载,而且只能重载c++中已经有的运算符。2.重载之后运算符的优先级和结合性不会发生改变。3.运算符重载时针对新类型的数据的实际需要,对原有运算进行适当...
运算符重载必须遵循哪些原则
1、重载后的操作符,必须至少有一个操作数是用户定义的类型。2、不能违反操作符的句法规则,比如用“+”计算两个对象的差。3、不能定义新的操作符,要使用原有的。4、有一些操作符是不能重载的,但是绝大部分的算术运算符和逻辑运算符都可以重载。
什么是运算符重载?
运算符重载的几个问题 1. 运算符重载的作用是什么?它允许你为类的用户提供一个直觉的接口。运算符重载允许C/C++的运算符在用户定义类型(类)上拥有一个用户定义的意义。重载的运算符是函数调用的语法修饰:class Fred { public:// ...};if 0 // 没有算符重载:Fred add(Fred, Fred);Fred ...
C++中的运算符重载,帮我详细介绍下
一、运算符重载的作用 运算符重载为类的用户提供了更直观的接口,使类类型的对象也可以像普通变量一样进行运算符的表达式运算。运算符重载允许C/C++的运算符在用户定义类型(类)上拥有一个用户定义的意义。二、运算符重载的规则 (1)C++中的运算符除了少数几个以外,全部可以重载,而且只能重载已有的...