
求助,关于一道C++函数重载的问题
如果表达式y*x++中,"*"是作为从成员函数重载的运算符,"++"是作为友元函数重载的运算符,采用运算符函数调用格式时,该表达式应表示为______A)x.operat...
如果表达式y*x++中,"*"是作为从成员函数重载的运算符,"++"是作为友元函数重载的运算符,采用运算符函数调用格式时,该表达式应表示为______
A)x.operator++(0).operator*(y)
B)operator*(x.operator++(0),y)
C)y.operator*(operator++(x,0))
D)operator*(operator++(x,0),y)
对于这个题我有如下两个问题
1、operator++(c1,c2)这样的形式适用于成员函数的重载吗?
2、这个应该是后置自加运算符,可重载的好像是前置运算符,后置的不是要加int吗?这个该怎么解释?
我是个刚学C++的新手,麻烦讲的通俗些详细些,谢谢了~ 展开
A)x.operator++(0).operator*(y)
B)operator*(x.operator++(0),y)
C)y.operator*(operator++(x,0))
D)operator*(operator++(x,0),y)
对于这个题我有如下两个问题
1、operator++(c1,c2)这样的形式适用于成员函数的重载吗?
2、这个应该是后置自加运算符,可重载的好像是前置运算符,后置的不是要加int吗?这个该怎么解释?
我是个刚学C++的新手,麻烦讲的通俗些详细些,谢谢了~ 展开
展开全部
1、运算符重载不改变操作符原先的优先级、结合性和操作数数目,++是单目操作符,所以1不会成立的。
你有这样的问题大概是因为双目操作符比如*,可以有x.operator*(y)这种写法吧? 但是这个不改变*是二目操作符的事实。C++规定:双目操作符重载作为成员函数时只能有一个形参,调用方为左操作数,形参为右操作数。所以x.operator*(y)等价于x*y。
2、重载的是后置++。后置++重载作为成员函数时跟你说的一样,就只有一个int形参且该形参只起标志作用,在函数体实现不会用到;而作为友元函数时则是写成了双目的形式:
operator++(class ,int),这个跟双目运算符重载为成员函数时单形参否则双形参是一个道理的。换句话说,在重载的时候你可以把后置++看做是双目运算符,只是右操作数只是起与前置区分的标识作用而已。
你有这样的问题大概是因为双目操作符比如*,可以有x.operator*(y)这种写法吧? 但是这个不改变*是二目操作符的事实。C++规定:双目操作符重载作为成员函数时只能有一个形参,调用方为左操作数,形参为右操作数。所以x.operator*(y)等价于x*y。
2、重载的是后置++。后置++重载作为成员函数时跟你说的一样,就只有一个int形参且该形参只起标志作用,在函数体实现不会用到;而作为友元函数时则是写成了双目的形式:
operator++(class ,int),这个跟双目运算符重载为成员函数时单形参否则双形参是一个道理的。换句话说,在重载的时候你可以把后置++看做是双目运算符,只是右操作数只是起与前置区分的标识作用而已。
展开全部
这个答案是c
1.如果是成员函数重载事实上就是 *this.operator*(int) 想要位于重载符号两边的数字都在函数参数内只能声明为非成员函数 常用的就是声明为friend
2.此处重载的是++的后置运算符
const class operator++(int){}
由于是friend 所以为const class operator++(class,int){}
明白了没
1.如果是成员函数重载事实上就是 *this.operator*(int) 想要位于重载符号两边的数字都在函数参数内只能声明为非成员函数 常用的就是声明为friend
2.此处重载的是++的后置运算符
const class operator++(int){}
由于是friend 所以为const class operator++(class,int){}
明白了没
追问
由于是friend 所以为const class operator++(class,int){}
这个是怎么看出来的?
追答
你把友函数的概念和为什么要用友函数搞明白就自然知道了···
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
答案是c
1。隶属函数重载的事实是* this.operator *(INT)只能使用非成员函数被声明为朋友
这里后运营商宣布,双方的重载符号的数字功能参数要设重载+ +
常量类的运算符+ +(){}
因为是朋友,所以const类操作符+ +(类INT){}
不明白
1。隶属函数重载的事实是* this.operator *(INT)只能使用非成员函数被声明为朋友
这里后运营商宣布,双方的重载符号的数字功能参数要设重载+ +
常量类的运算符+ +(){}
因为是朋友,所以const类操作符+ +(类INT){}
不明白
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.对于单目运算符,建议选择成员函数;
2.对于运算符“=,(),[],->”只能作为成员函数;
3.对于运算符“+ =,-=,/=,*=,&=,!=,~=,%=,<<=,>>=”建议重载为成员函数;
4.对于其他运算符,建议重载为友元函数。
2.对于运算符“=,(),[],->”只能作为成员函数;
3.对于运算符“+ =,-=,/=,*=,&=,!=,~=,%=,<<=,>>=”建议重载为成员函数;
4.对于其他运算符,建议重载为友元函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
答案是c
1。隶属函数重载的事实是* this.operator *(INT)只能使用非成员函数被声明为朋友
这里后运营商宣布,双方的重载符号的数字功能参数要设重载+ +
常量类的运算符+ +(){}
因为是朋友,所以const类操作符+ +(类INT){}
不明白
1。隶属函数重载的事实是* this.operator *(INT)只能使用非成员函数被声明为朋友
这里后运营商宣布,双方的重载符号的数字功能参数要设重载+ +
常量类的运算符+ +(){}
因为是朋友,所以const类操作符+ +(类INT){}
不明白
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询