当前位置:首页 > 编程技术 > 正文

不能用友元函数重载的运算符?详尽指南

不能用友元函数重载的运算符?详尽指南

大家好,今天给各位分享不能用友元函数重载的运算符?详尽指南的一些知识,其中也会对不能用友元函数重载的运算符有哪些进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问...

大家好,今天给各位分享不能用友元函数重载的运算符?详尽指南的一些知识,其中也会对不能用友元函数重载的运算符有哪些进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

文章目录:

...的重载只能使用成员函数而不可以使用友元函数?求高手、大神帮我解答...

1、只能使用成员函数重载的运算符有:=、()、[]、-、new、dte。(2)单目运算符最好重载为成员函数。(3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、=、=建议重载为成员函数。(4) 对于其它运算符,建议重载为友元函数。

2、因为,输出运算符重载函数的第一个形参必须是ostream或istream类型,而成员函数的第一个形参是默认的(即this指针)。

3、运算符函数重载一般有两种形式:重载为类的成员函数和重载为类的非成员函数。非成员函数通常是友元。(可以把一个运算符作为一个非成员、非友元函数重载。但是,这样的运算符函数访问类的私有和保护成员时,必须使用类的公有接口中提供的设置数据和读取数据的函数,调用这些函数时会降低性能。

4、如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。而 或 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。就只能申明为友元函数了。。

5、答选择B,运算符重载函数既可以是一个成员函数,也可以是友元函数 运算符重载为成员函数时,形参个数一般为运算符的元数减1,重载为非成员函数时,形参个数一般和运算符元数相等。

6、=操作符重载函数不能为友元函数,只能为某类中的成员函数.假如将赋值运算符重载为Dog类的友元:friend Dog operator=( Dog &d1, Dog &d2){ dage = dage;return d1;} 例如有表达式 x = y;可以正确的将y赋值给x; x,y都是Dog类的对象。

成员函数重载运算符和友元函数重载运算符

“*”用友元函数重载就是运算符函数不作为成员函数,而把它放在类外,“*”被改写为“operator*”。“+”为成员函数重载,X.operator+。所以“x+y*z”被改写为“x.operator+(operator*(y,z)”。

只能使用成员函数重载的运算符有:=、()、[]、-、new、dte。(2)单目运算符最好重载为成员函数。(3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、=、=建议重载为成员函数。(4) 对于其它运算符,建议重载为友元函数。

在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。成员函数的形式比较简单,就是在类里面定义了一个与操作符相关的函数。友元函数因为没有this指针,所以形参会多一个。

关于C++重载运算符

1、总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。运算符重载可以使用成员函数和友元函数两种形式。可以参考以下的经验:(1)只能使用成员函数重载的运算符有:=、()、[]、-、new、dte。

2、注:cout和cin都是C++中iostream类的一个对象,对于cout使用的运算符,是在类中被重载了的,因此运算符就是一个重载的操作运算符。

3、如果返回值会被赋值,就必须返回引用,例如=重载\x0d\x0a如果返回值是一个局部变量,就一定不能返回引用,例如+重载\x0d\x0a如果为了提高效率,参数可以使用引用,\x0d\x0a而[]的实际参数经常是一个常量,常量你是无法引用,所以不能用引用作为[]的参数。

4、char &operator[](int i);//请说明此行的&是什么作用 函数的声明,防止在没有定义函数实体之前,被早先调用致使编译错误 2 char &charArray:operator[](int i)//&是什么用,去掉会出错 返回的是一个char 型的变量,去掉的话返回的是char型的值。前者可以作为变量对它进行赋值。

5、错得一塔糊涂啊,一点都不正确,首先操作符重载是一个函数,你定义了反回值类型为int,却没有反回值。而且操作符重载函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止程序员运用运算符改变内置类型的函义。

6、运算符重载的作用 运算符重载为类的用户提供了更直观的接口,使类类型的对象也可以像普通变量一样进行运算符的表达式运算。运算符重载允许C/C++的运算符在用户定义类型(类)上拥有一个用户定义的意义。

c语言,c++,哪些运算符不能重载?

C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 例如,有人觉得BASIC中用“**“作为幂运算符很方便,也想在C++中将”**“定义为幂运算符,用”3**5“表示35,这样是不行的。2) 重载不能改变运算符运算对象(即搡作数)的个数。

C++中绝大部分的运算符允许重载。不能重载的运算符只有5个:(1). (成员访问运算符)。(2).* (成员指针访问运算符)。(3)∷(域运算符)。(4)sizeof(长度运算符)。(5)?: (条件运算符)。

在C++运算符中,有一些运算符是不允许被重载的。这种限制是出于安全方面 的考虑,可防止错误和混乱。(1)不能改变C++内部数据类型(如int,float 等)的运算符。(2)不能重载 . , .* , : ,?: (共四种),因为‘.’在类中对任何成员都有意义,已经成为标准用法。

【答】:C 不能被重载的运算符还包括:“.”、“.*”、“-*”和“?:”。

可看到,c++之所以不允许重载?:运算符,是考虑到?:运算符的条件特性。运算符的重载实质是函数的调用 比如 A?B:C 假设重载函数原型 operator ?: (A,B,C)那么,其跳转性质就不复存在了。

c++中的重载运算符和为什么是只可以为友元函数,不可是成员函数?我...

1、如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。而 或 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。就只能申明为友元函数了。。

2、因为,输出运算符重载函数的第一个形参必须是ostream或istream类型,而成员函数的第一个形参是默认的(即this指针)。

3、因为你重载和是为了通过流输出/输入你的数据类型 所以你的调用会像这样:myclass a;std:cina;这样第一个参数是cin,也就是流类型 所以如果作为成员的话也是istream类的成员 但是istream是定义好的,不能更改,所以只能用友元函数或普通函数的方法。输出的情况同理。

C++中不能被友元函数重载的运算符是:

关于运算符重载为友元函数有如下规定:①一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数;②双目运算符“=、()、[]、-”不能重载为类的友元函数。所以本题答为A。

不能重载的运算符只有5个:. (成员访问运算符).* (成员指针访问运算符): (域运算符)sizeof(长度运算符)?: (条件运算符)前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof 运算符的运算对象是类型而不是变量或一般表达式,不具备重载的特征。

与成员运算符函数不同,友元运算符函数是不属于任何类对象的,它没有this指针。若重载的是双目运算符,则参数表中有两个操作数;若重载的是单目运算符,则参数表中只有一个操作数。 不能用友元函数重载的运算符是=、()、[]、-〉,其余的运算符都可以使用友元函数来实现重载。

如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。而 或 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。就只能申明为友元函数了。。

=操作符重载函数不能为友元函数,只能为某类中的成员函数.假如将赋值运算符重载为Dog类的友元:friend Dog operator=( Dog &d1, Dog &d2){ dage = dage;return d1;} 例如有表达式 x = y;可以正确的将y赋值给x; x,y都是Dog类的对象。

文章到此结束,如果本次分享的不能用友元函数重载的运算符?详尽指南和不能用友元函数重载的运算符有哪些的问题解决了您的问题,那么我们由衷的感到高兴!

最新文章