使用 c++ 一些表示灵活数据体的对象时,经常会看到形如 a.reshape({1, 2}).add(1) 这样连续的成员函数调用,这是怎么实现的呢?其实很简单,只需要让需要被连续调用的成员函数最后返回该对象的引用(不能是拷贝)即可:

class A {public:A& setN(int n) {_n = n;return *this;}int _n;
};
// 以下两种写法等价:
// A a; a.setN(1).setN(2);
// A a; a._n = 1; A& b = a; b._n = 2;

一个简单的例子

class Demo {public:Demo() {_a = 0;_b = 0;_c = 0;}Demo(int a, int b, int c) : _a(a), _b(b), _c(c) {}int getA() {return _a;}int getB() {return _b;}int getC() {return _c;}Demo& setA(int a) {_a = a;return *this;}Demo& setB(int b) {_b = b;return *this;}Demo& setC(int c) {_c = c;return *this;}private:int _a;int _b;int _c;
};int main() {Demo d;d.setA(1).setB(2).setC(3).setA(4);std::cout << d.getA() << ", " << d.getB() << ", " << d.getC() << std::endl;
}// 输出
// 4, 2, 3

C++ 成员函数连续调用相关推荐

  1. static成员函数不能调用non-static成员函数

    1 一般类静态成员函数不能调用非静态成员函数 2 static成员函数可以调用构造函数吗? 答案是肯定的,由于static成员函数没有this指针,所以一般static成员函数是不能访问non-sta ...

  2. Cpp 对象模型探索 / 类普通成员函数的调用方式

    C++设计时有一个要求,类普通成员函数的调用性能要和全局函数差不多.所以编译器在处理类的普通成员函数的宗旨是将其当作全局函数来处理. 为了达到上述目的,编译器会对类的普通成员函数进行如下操作: 在函数 ...

  3. [C++] - lambda capture的成员函数 异步调用

    关于lambda capture: If the capture-default is &, subsequent simple captures must not begin with &a ...

  4. 关于常成员函数对非常成员函数的调用问题

    常成员函数不能调用非常成员函数: 比如: #include<iostream> using namespace std; class A {const void print(){cout& ...

  5. dojo——AMD(二、AMD中class内部成员函数相互调用实现)

    一.引言 这两天写arcgis javascript代码的时候,自己以为对dojo的amd规范掌握了,可是后来碰到了一个问题,在每个module中成员函数调用另外一个成员函数必须使用this调用(这点 ...

  6. c++成员函数的调用——常成员函数

    1.4-5 成员函数的选择调用一一常成员函数 (15 分) 类中的常对象选择调用常成员函数.语法要点: 如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,而不能调用其他成员函数.补充完 ...

  7. C++类static成员函数的调用

    class中的静态成员函数作用再整个类的内部,对应类的所有实例是共享静态成员函数的,在调用静态成员函数的时候跟调用非静态成员函数是有区别的.另外,静态成员函数只能访问对应类内部的静态数据成员,否则会出 ...

  8. java 成员函数相互调用_java 深入理解内部类以及之间的调用关系

    什么是内部类 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和 ...

  9. 在一个类的成员函数中调用另一个类的成员函数

    假设你想在类A里调用类B的函数int f(x),两种办法: 1.class A::B  也就是说将B定义为A的父类, 这样你就可以自然的在A里面用f(x)了 2.class A { B B_ins; ...

最新文章

  1. Ajax请求全局配置
  2. HTML5的本地存储详解
  3. opencv线结构光三维重建
  4. Java学习必不可少的网站,快收藏起来!
  5. 根据年份-月份,获得此月份的所有日期
  6. ubuntu默认root密码
  7. MongoDB的C#驱动基本使用
  8. webpack4.0学习笔记
  9. WPF中DataGrid在没有数据的时候也可以显示水平滚动条
  10. Windows文件同步
  11. iOS开发-使用dSYM文件符号化Crash日志
  12. 说点牛逼的“愿景,使命,目标,战略”
  13. Spring文件上传接口学习(MultipartFile,MultiparHttpservletRequest,MultipartResolver)
  14. docker desktop 阿里云镜像加速
  15. Caused by: java.lang.ClassNotFoundException: org.jbpm.pvm.internal.processengine.SpringHelper
  16. dell inspiron 只有一个飞行模式 没有wifi_连上WiFi就能打电话?“手机营业厅”中的神奇功能火了...
  17. java+上传文件夹
  18. 北京化工大学计算机复试面试题,北京化工大学综合素质测试面试题历年总结
  19. web期末作业设计网页 HTML+CSS+JavaScript仿王者荣耀游戏新闻咨询(网页设计期末课程设计)...
  20. Java基础or介绍骚话

热门文章

  1. centos怎么卸载mysql
  2. 4种高速安全混合云解决方案,助力您的云迁移之旅
  3. 对我国师生数学学习和教学观念的反思 郇中丹教授
  4. Android Makefile 及Android.mk 整理
  5. ACM这条路不好走,但还是有很多人走在这条路上
  6. Netbackup for sap 7.0学习之七:使用nbu进行sap系统的灾难恢复测试
  7. C#基础知识学习——特性(Conditional特性、Obsolete特性、自定义特性)(十六)
  8. 我的兄弟姐妹 ----- 转发的项目组一鬼才的作品。语不惊人死不休,只有瞻仰的份了……...
  9. android adb shell am 可以用来启动activity ,而且可以通过-e 传入参数, 牛牛牛
  10. 一张图看明白电信云解决方案架构