大家好,不能用友元函数重载的运算符?详尽指南相信很多的网友都不是很明白,包括为什么=不能用友元函数重载也是一样,不过没有关系,接下来就来为大家分享关于不能用友元函数重载的运算符?详尽指南和为什么=不能用友元函数重载的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
文章目录:
...的重载只能使用成员函数而不可以使用友元函数?求高手、大神帮我解答...
只能使用成员函数重载的运算符有:=、()、[]、-、new、dte。(2)单目运算符最好重载为成员函数。(3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、=、=建议重载为成员函数。(4) 对于其它运算符,建议重载为友元函数。
因为,输出运算符重载函数的第一个形参必须是ostream或istream类型,而成员函数的第一个形参是默认的(即this指针)。
运算符函数重载一般有两种形式:重载为类的成员函数和重载为类的非成员函数。非成员函数通常是友元。(可以把一个运算符作为一个非成员、非友元函数重载。但是,这样的运算符函数访问类的私有和保护成员时,必须使用类的公有接口中提供的设置数据和读取数据的函数,调用这些函数时会降低性能。
如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。而 或 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。就只能申明为友元函数了。。
答选择B,运算符重载函数既可以是一个成员函数,也可以是友元函数 运算符重载为成员函数时,形参个数一般为运算符的元数减1,重载为非成员函数时,形参个数一般和运算符元数相等。
=操作符重载函数不能为友元函数,只能为某类中的成员函数.假如将赋值运算符重载为Dog类的友元:friend Dog operator=( Dog &d1, Dog &d2){ dage = dage;return d1;} 例如有表达式 x = y;可以正确的将y赋值给x; x,y都是Dog类的对象。
C++中不能被友元函数重载的运算符是:
1、关于运算符重载为友元函数有如下规定:①一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数;②双目运算符“=、()、[]、-”不能重载为类的友元函数。所以本题答为A。
2、不能重载的运算符只有5个:. (成员访问运算符).* (成员指针访问运算符): (域运算符)sizeof(长度运算符)?: (条件运算符)前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof 运算符的运算对象是类型而不是变量或一般表达式,不具备重载的特征。
3、与成员运算符函数不同,友元运算符函数是不属于任何类对象的,它没有this指针。若重载的是双目运算符,则参数表中有两个操作数;若重载的是单目运算符,则参数表中只有一个操作数。 不能用友元函数重载的运算符是=、()、[]、-〉,其余的运算符都可以使用友元函数来实现重载。
4、如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身。。而 或 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点。。就只能申明为友元函数了。。
5、=操作符重载函数不能为友元函数,只能为某类中的成员函数.假如将赋值运算符重载为Dog类的友元:friend Dog operator=( Dog &d1, Dog &d2){ dage = dage;return d1;} 例如有表达式 x = y;可以正确的将y赋值给x; x,y都是Dog类的对象。
关于C++重载运算符
总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。运算符重载可以使用成员函数和友元函数两种形式。可以参考以下的经验:(1)只能使用成员函数重载的运算符有:=、()、[]、-、new、dte。
注:cout和cin都是C++中iostream类的一个对象,对于cout使用的运算符,是在类中被重载了的,因此运算符就是一个重载的操作运算符。
如果返回值会被赋值,就必须返回引用,例如=重载\x0d\x0a如果返回值是一个局部变量,就一定不能返回引用,例如+重载\x0d\x0a如果为了提高效率,参数可以使用引用,\x0d\x0a而[]的实际参数经常是一个常量,常量你是无法引用,所以不能用引用作为[]的参数。
char &operator[](int i);//请说明此行的&是什么作用 函数的声明,防止在没有定义函数实体之前,被早先调用致使编译错误 2 char &charArray:operator[](int i)//&是什么用,去掉会出错 返回的是一个char 型的变量,去掉的话返回的是char型的值。前者可以作为变量对它进行赋值。
错得一塔糊涂啊,一点都不正确,首先操作符重载是一个函数,你定义了反回值类型为int,却没有反回值。而且操作符重载函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止程序员运用运算符改变内置类型的函义。
运算符重载的作用 运算符重载为类的用户提供了更直观的接口,使类类型的对象也可以像普通变量一样进行运算符的表达式运算。运算符重载允许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)不能重载 . , .* , : ,?: (共四种),因为‘.’在类中对任何成员都有意义,已经成为标准用法。
关于不能用友元函数重载的运算符?详尽指南和为什么=不能用友元函数重载的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。