在c++中,运算符和友元函数重载运算符有什么区别

C++中运算符 &和&&、|和|| 的区别
&&是逻辑与运算符,||是逻辑或运算符,都是逻辑运算符,两边只能是bool类型
&与| 既可以进行逻辑运算,又可以进行位运算,两边既可以是bool类型,又可以是数值类型
if (A && B) 如果 A 为 false ,整个表达式就为 false,不再计算 B 的值了。
if (A & B) 如果 A 为 false ,整个表达式就为 false,但还要计算 B 的值。
if (A && B++) 如果A 为 false,&&不会再计算后面的值
if (A & B++) 如果A 为 false,&则会计算后面的值
& | 为整型和 bool 类型预定义了两种运算规则
对于整型,& 和 | 计算操作数的按位“与”;
对于 bool 操作数,& 或 | 计算操作数的逻辑“与”、“或”;
也就是说对于bool类型 & 和&&、| 和 || 的if判断结果是相同的。
对于整形数据&&只判断真假(0或非0),两边的数据必须都为真或任一方为假;
对于整形数据&两边的数据则进行按位与运算,并返回计算结果让if判断这个值
逻辑(AND): true && false : false
按位(AND):
(二进制位)
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!> 问题详情
经常和一个运算符连用,构成一个运算符函数名的C++关键字是【】。
悬赏:0&答案豆
提问人:匿名网友
发布时间:
经常和一个运算符连用,构成一个运算符函数名的C++关键字是【 】。请帮忙给出正确答案和分析,谢谢!
为您推荐的考试题库
您可能感兴趣的试题
1对虚函数的调用有两种方式:【&】和【&】。
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
每天只需0.4元
选择支付方式
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
恭喜你被选中为
扫一扫-免费查看答案!
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
提示:请截图保存您的账号信息,以方便日后登录使用。
常用邮箱:
用于找回密码
确认密码:C++中点操作符和箭头操作符的使用详解
转载 &更新时间:日 10:58:04 & 作者:
本篇文章介绍了,C++中点操作符和箭头操作符的使用详解。需要的朋友参考下
C++中对于类来说,对于其中的成员,用点操作符.来获得,
而对于一个指向类对象的指针来说,则用箭头操作符-&调用该指针所指向对象的成员。
当类定义-&重载操作符后,则既可以用箭头操作符,也可以用点操作符。重载-&操作符
重载箭头操作符必须定义为类成员函数。没有显式形参(而且是类成员,唯一隐式形参是this)。-&的右操作数不是表达式,而是对应类成员的一个标识符,由编译器处理获取成员工作。
重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型对象。
如果返回类型是指针,则内置箭头操作符可用于该指针,编译器对该指针解引用并从结果对象获取指定成员。如果被指向的类型没有定义那个成员,则编译器产生一个错误。如果返回类型是类类型的其他对象(或是这种对象的引用),则将递归应用该操作符。编译器检查返回对象所属类型是否具有成员箭头,如果有,就应用那个操作符;否则,编译器产生一个错误。这个过程继续下去,直到返回一个指向带有指定成员的的对象的指针,或者返回某些其他值,在后一种情况下,代码出错。代码分析:
下面给出代码,加深理解。 代码如下:#include &iostream&&&class A{&public:&&&& void action()&&&& {&&&&&&&& cout&&"action in class A!"&&&&&& }&};&class B{&&&&&&&& //A&& &public:& &&&& A&&&& A* operator-&(){&& &&&&&&&& return &a;&& &&&& }&& &&&& void action(){&& &&&&&&&& cout && "Action in class B!" &&&& &&&& } &};&class C{&public:&& &&&& B operator-&(){&& &&&&&&&&&& &&&& }&& &&&& void action(){&& &&&&&&&& cout && "Action in class C!" &&&& &&&& } &};&int main()&& &{&& &&&& C* pc = new C;&& &&&& pc-&action();&& &&&& C&& &&&& c-&action();&&& &&&& return 0;&& &}上面代码输出结果是:Action in class C!Action in class A!
对于代码 代码如下:&&& C* pc = new C;&&& pc-&action();
输出的结果是:Action in class C!这是因为pc是类对象指针,此时的箭头操作符使用的是内置含义,对pc解引用然后调用对象的成员函数action。
对于代码: 代码如下:&&& C&&& c-&action();
可以这样理解:
c是对象,c后面的箭头操作符使用的是重载箭头操作符,即调用类C的operator-&()成员函数。此时返回的是类B的对象,所以调用类B的operator-&()成员函数,B的operator-&()返回的是指针,所以现在可以使用内置箭头操作符了。对B的operator-&()返回的指针进行解引用,然后调用解引用后的对象的成员函数action,此时调用的就是类A的action()。这里存在一个递归调用operator-&()的过程,最后再使用一次内置含义的箭头操作符。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具C++中 运算符重载 到底有什么何意义?_百度知道
C++中 运算符重载 到底有什么何意义?
一直想不透这个问题,运算符重载与没重载前有什么不同,用operator定义一个运算符重载函数,不就和用一个其他名字的函数定义一个运算方式一样的吗?请高手指点,我层次交浅,请说得通俗点,用例说明最好,先谢谢!!!
我有更好的答案
  运算符重载是一种特殊的函数重载。  c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。  由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。  在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。  成员函数的形式比较简单,就是在类里面定义了一个与操作符相关的函数。友元函数因为没有this指针,所以形参会多一个。
运算符重载是一种特殊的函数重载。例如int a,b;则求a+b值时,在编译过程中使用的是函数调用:opertor+(a,b).主要作用就是使程序更加简洁,减少编程时间。
本回答被提问者采纳
的确是一样的,比如你重载了加号,其实是同样可以定义add()函数来完成相同的操作。重载是为了让运算比较符合人的思维,比如定义一个矩阵类matrixmatrix a, b ,c;//...//初始化a、b的语句c = a+b; //如果没有重载加号的话,这条就通不过编译了只是这个+号你同样可以定义一个add函数来操作,如:c = a.add(b);你觉得哪种方法比较直观?
你想想如果两个时间相加,你用+号行吗?你要是把+号重载一下,写一个你自己的+号运算方法不就可以了。运算符重载就是自己定义符号
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
运算符重载的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。c++中的%和mod运算符有什么区别吗_百度知道
c++中的%和mod运算符有什么区别吗
我有更好的答案
运算符是计算的,类同+-*/但是mod是表示取模运算的意思,是文字说明
采纳率:76%
来自团队:
c++没有 mod方法,但有fmod,%只支持整数
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 友元函数重载运算符 的文章

 

随机推荐