挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)天下盾/国内/免实名/免备案CDN无视一切CC/DD攻击 找塔科夫作者TG @wuhao1954 QQ283931494 出租内核驱动读写保护,价格亲民,高品质群:530544047 →入驻S9企业发卡网各种全黑号辅助群:475351077
██【我要租此广告位】██... .
查看: 1963|回复: 2
打印 上一主题 下一主题

C++编程教程_箭头(->)运算符的重载

[复制链接]

205

积分

66

主题

0

听众
已帮网友解决0 个问题
好评
0
贡献
139
海币
389
交易币
0
跳转到指定楼层
楼主
发表于 2015-11-12 17:13:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


C++箭头操作符不同。它可能会出现像一个二元运算符为:接收对象和一个成员的名字。为解引用成员的对象。无论怎样的箭头操作符的外观不接受明确的参数。没有第二参数,因为 - >右操作数不是表达式,相反,是对应于类成员的标识符。有作为一个参数传递给函数,与此相反,以获得由编译器部件处理工作没有可行的方式明确标识符。

箭头操作符( - >)常见的用法是使用一类对象的指针调用对象的指针的成员。左操作数是一个对象指针(本),该对象的右操作数名成员。在定义了重载箭头操作符看起来有点特别,你可以用一个指针类对象调用,您可以直接与类对象调用。重载箭头操作员必须被定义为类的成员函数。

1.箭头操作符的调用过程
当这样编写时:
point->action();
由于优先级规则,它实际等价于编写:
(point->action)();换句话说,我们要调用是点 - >诉讼,寻求一个结果值。编译器,以便将代码进行评估:
(1)如果该点是一个指向一个对象与命名的动作的构件类,编译器将调用动作代码编译为对象的成员(默认语义)。
(2)否则,如果点(注:中国版误写为行动引物)是一个对象操作符 - >操作符,该点 - >操作和point.operator的定义 - >() - >行动相同。即,操作者的执行点 - >(),然后使用的重复这三个步骤的结果。 (递归调用)
(3)。否则,代码错误。
总结:通过箭头( - >)执行运营商,我们可以得出结论,“重载箭头操作人员必须返回一个指向类类型,或返回定义了自己的箭头操作符类类型的对象。”返回前利用调用编译器的默认语义结束箭头操作符(如果返回类型是一个指针,内置箭头操作符,可用于指针,引用指针编译器解决方案,并从指定的成员对象得到结果),这用于返回递归调用。 (如果返回类型是引用另一对象类型(或对象),操作者将被应用递归编译器检查返回的对象是否属于箭头类型的成员,如果有的话,对操作者的申请;否则,编译器将产生错误。这个过程继续,直到返回一个指针对象与指针的指定成员,或返回一些其它值,在后一种情况下,该代码是错误的)。

2. 实例分析
根据编程语言理解,定义了3个类,C包含B,B包含A。A、B、C都定义了一个action的成员函数。B和C都重载箭头操作符,不同的是B的重载箭头操作符返回的是A类对象的指针,而C的重载箭头操作符返回的是B类对象。
1.
点击(此处)折叠或打开
#include
using namespace std;



class A{

public:

void action(){

cout << "Action in class A!" << endl;

}

};



class B{

A a;

public:

A* operator->(){ //返回指针

return &a;

}

void action(){

cout << "Action in class B!" << endl;

}

};



class C{

B b;

public:

B operator->(){ //返回对象

return b;

}

void action(){

cout << "Action in class C!" << endl;

}

};



int main(int argc, char *argv[])

{

C* pc = new C;

pc->action(); //指针调用(使用默认语义)

C c;

c->action(); //对象调用(使用重载语义)

getchar();

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;
c->action();
输出的结果是
Action in class A!
其实c->action();的含义与c.operator->().operator->()->action();相同。
c++为对象,C后面的箭头运营商正在使用箭头操作符要求C类重载运营商 - >()成员函数。这将返回类对象B,所以称之为B级的运营商 - >()成员函数,B的运营商 - >()返回一个指针,所以现在你可以使用内置的箭头操作符。运营商B的 - >(反向指针)提领,然后调用该对象的成员函数解引用动作之后,在这种情况下,呼叫是行动的A级()。这里有一个递归调用运营商 - >()方法,并最终采用了内置意箭头运算符。更多有关c++相关的网络课程可资讯课课家网络教育平台进行学习观看视频教程




联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:林锐-高质量C、C++编程指南
下一篇:C++ 基础教程--推荐初学者看!很不错的教程
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:[email protected]),本站将立即改正。

1

积分

0

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
2340
交易币
0
沙发
发表于 2015-11-13 07:09:01 | 只看该作者
回复

使用道具 举报

3正式会员
176/300

176

积分

4

主题

1

听众
已帮网友解决0 个问题
好评
0
贡献
172
海币
379
交易币
0
板凳
发表于 2016-3-19 11:38:17 | 只看该作者
打酱油的啦,飘过赚点海币而已。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2024-4-29 23:51 , Processed in 0.352504 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表