为什么c++ 重载输出运算符的时候要取地址 ostream &operator<<?
&不表示取地址,而表示引用。由于ostream对象不可复制,因此无论是作为参数传入,还是作为返回值传出,都必须使用引用形式。即ostream& operator<<(ostream&, MyClass)的定义方式是正确的,而ostream operator<<(ostream, MyClass)的定义方式是错误的。
C++重载=,+=等时候为什么要用返回引用
为什么要返回引用,我说你仔细想一下就明白了,你的函数会修改你操作的流,而流是全局的,不是临时变量,是系统托管的。如果不返回引用,后面对流的操作就是无效的了,因为你返回的只是某时流的一个拷备,以后对它的操作不会显示出来了。就像上面为什么我可以连用两次<<操作符?如果不是返回引用,第...
C++运算符重载,+-*\/的重载,返回值为什么是对象而不是对象的引用?而流操...
分析不能用引用的原因: 函数传入了两个参数a,b,并且+只能传入两个参数(c++不允许自己创造运算符),这样就限定了和sum不能作为参数传入,所以sum只能是一个函数里的临时变量,但是临时变量在函数结束时是要销毁的,那么函数调用玩,sum就没有了, 如果返回引用,引用源都已经没有了,还怎么引用,...
运算符重载 &,有些时候函数声明在operator前有&……有时候没有……为 ...
第一是需求, 有些情况语法要求必须返回引用 比如重载=操作符, 返回引用才可写出 a1=a2=a3这样的语句 再如[]操作符, 返回引用才能实现这样的语句: a[0]=1;第二是效率问题:很多情况是不需要返回引用的, 比如双目的+, 可以是返回一个对象的副本, 但是返回引用比返回对象的副本效率要高, 因为返回...
在C++中运算符重载的时候究竟什么时候应该加引用,什么时候不应该加引...
如果返回值会被赋值,就必须返回引用,例如=重载\\x0d\\x0a如果返回值是一个局部变量,就一定不能返回引用,例如+重载\\x0d\\x0a如果为了提高效率,参数可以使用引用,\\x0d\\x0a而[]的实际参数经常是一个常量,常量你是无法引用,所以不能用引用作为[]的参数。
c++中的重载运算符<<和>>为什么是只可以为友元函数,不可是成员函数?我...
左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。。就只能申明为友元函数了。。。如果一定要声明为成员函数,只能成为如下的形式:ostream & operator<<(ostream &output){ return output;} 所以在运用这个<<运算符时就变为这种形式了:data<<cout;不合符人的习惯。
C++中运算符重载问题,分别说明下面const的作用以及为什么要用引用
一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。原因如下:如果返回值为某个对象为const(const A test = A 实例)或某个对象的引用为const(const A& test = A实例) ,则返回值...
运算符重载的参数为什么必须要类?
编译因不支持对象运算而报错。为了让编译器在遇到对象运算时能按我们要求的进行运算,这就是运算符重载的意义,即重定义运算符,因此你可以看到,运算符重载就是为类对象服务的,那么两个对象的成员进行运算那必须先获得对象本身啦,所以运算符重载参数必须含有类指针或引用,这是主要客户。
为什么输出运算符重载不能是一个成员函数?而非得声明为友元?
因为,输出运算符重载函数的第一个形参必须是ostream或istream类型,而成员函数的第一个形参是默认的(即this指针)。
为什么operator lt;lt;运算符重载,需要定义为friend函数
友元函数有两种,一种不属于任何类的,这种其实和c的外部函数一样属于全局函数!一种是其他某个类的成员函数!只有全局性质的友元函数才会直接定义在类的内部!友元函数虽然不是类的成员函数,却是类的接口!和类关系密切,所以可以定义在类的内部!