博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++Primer : 第十四章 :成员访问运算符
阅读量:2434 次
发布时间:2019-05-10

本文共 848 字,大约阅读时间需要 2 分钟。

在迭代器类与智能指针类中常常用到解引用运算符(*)和箭头运算符(->)

class StrBlobPtr {
public: string& operator*() const {
auto p = check(curr, "dereference past end"); return (*p)[curr]; //(*p)是对象所指的vector } string* operator->() const {
return &this->operator*(); //将实际工作委托给解引用运算符 }};

解引用运算符首先检查curr是否仍在作用范围内,如果是,则返回curr所指元素的一个引用。箭头运算符不执行任何自己的操作。而是调用解引用运算符并返回解引用结果元素的地址。

两个运算符定义成了const成员,因为获取一个元素并不会改变StrBlobPtr对象的状态。同时,它们的返回值分别是非常量string的引用或指针,因为一个StrBlobPtr只能绑定到非常量的StrBlob对象。

对于箭头运算符返回值的限定

对于形如point->mem的表达式来说,point必须是指向类对象的指针或者是一个重载了operator->的类的对象。根据point类型不同,point->mem分别等价于:

(*point).mem;     //point是一个内置的指针类型point.operator()->mem;      //point是类的一个对象

重载的箭头运算符必须返回类的指针或者自定义了箭头运算符的某个类的对象。

定义一个类令其含有指向StrBlobPtr对象的指针,为这个类定义重载的箭头运算符。

class MyClass {
public: string* operator->() const {
return ptr->operator->(); }private: StrBlobPtr* ptr;};

转载地址:http://otxmb.baihongyu.com/

你可能感兴趣的文章
漫画 | TCP,一个悲伤的故事
查看>>
张一鸣无圈胜破圈?
查看>>
干货! AI 推断解决方案栈 Vitis AI 全流程独家解析
查看>>
真相了 | 敲代码时,程序员戴耳机究竟在听什么?
查看>>
麒麟信安面向场景化创新,赋能openEuler商业验证
查看>>
3 年培养 10 万“码农”,郑州推出“码农计划”
查看>>
程序员弃码投中医?还做成了不错的生意! | 极客视频
查看>>
百度一 29 岁程序员因“篡改数据”被抓
查看>>
去年我年薪 30W,今年我一天做 3 顿饭
查看>>
入职大厂,我容易吗?
查看>>
狂赚 1227 亿!腾讯员工 2020 年人均年薪 81 万;小米员工人均年薪 45 万
查看>>
漫画:什么是加密算法?
查看>>
程序员有话说 |当那个不靠谱的程序员跟我做同一个项目时
查看>>
程序员是如何运用增长思维找到女朋友?
查看>>
@程序员,离职让企业损失近900亿,还遭疯抢!他凭什么?
查看>>
“离开360时,它只给了我一块钱”
查看>>
PDF 翻译神器,再也不担心读不懂英文 Paper 了
查看>>
漫话:如何给女朋友解释什么是RPC
查看>>
不要成为自己讨厌的那种程序员 | 程序员有话说
查看>>
为什么程序员下班后只关显示器从不关电脑?
查看>>