连续调用
来源:互联网 发布:淘宝客如何地推 编辑:程序博客网 时间:2024/04/30 15:42
首先说下什么是我所谓的连续调用,假设有一个类person:
person a;a.set("kangzj").get().set("abc");
加红的部分即为本文要说的连续调用。
怎么实现呢,很简单,只要让成员函数返回一个指向当前对象的引用即可,于是,我这样定义这个类:
class person{private:string name;public:const person& get() const;person& set(string n);};const person& person::get(){cout<<name;return *this;}person& person::set(string t){name=t;return *this;}
Ok,可以使用了。这样的句子还是编译不会成功:
a.set("kangzj").get().set("abitno");
因为调用const型成员函数的this指针是const型,指向的对象也是const型,无法改变对象的成员变量。也就是说没法执行set操作,而出错。
怎样来解决这个问题呢?把get()重载,在单独调用get的时候调用const型的方法,在连续调用的时候调用非const的方法(当然都是自动的),基于这种思想可以这样来设计类(下面代码可以直接编译运行):
#include <iostream>#include <string> using namespace std;class person{private:string name; public:const person& get() const;person& get();person& set(string n);};const person& person::get() const{cout<<name<<" -const\n";return *this;}person& person::get(){cout<<name<<" -not const\n";return *this;}person& person::set(string t){name=t;return *this;} int main(){person a;a.set("kangzj").get().set("ddd").get();a.get();const person b;b.get();}
输出
kangzj -not constddd -not constddd -not const -const请按任意键继续. . .
- 连续调用
- 方法连续调用的实现
- libusb-win32 连续调用 usb_find_busses
- javascript自定义可连续调用,连续弹出的alert、confirm
- Activity中startActivityForResult()的连续调用
- localtime 2次连续调用问题
- UITextView监听事件连续调用三次
- Activity中startActivityForResult()的连续调用
- iOS - 调用相机连续拍照
- android listview 连续调用 getview调用getivew方法多次解决办法
- 连续两次递归调用的每一步的调用情况
- 连续
- 关于Ajax连续异步调用失败的疑惑
- 一个函数用2个点连续调用
- XMLHttp连续调用SEND需要注意的问题
- android listview 连续调用 getview问题分析及解决。
- [转]android listview 连续调用 getview问题分析及解决。
- 连续调用tcp_write函数,会导致系统崩溃
- iphone FMDB数据库(2)
- 如何检测和隔离内存泄漏(文章)
- struts2中使用freemarker 生成静态页面
- My first experience of using unbuntu
- 委托使用
- 连续调用
- 《Linux内核情景分析》阅读笔记
- 第三章 动态网页基础
- Android ddms
- Android 基础知识 - Intent & 屏幕显示
- http://www.unitymanual.com/page/6
- Object-c 格式化输出
- linux 时间设置 date clock hwclock
- 解惑 spring 嵌套事务