连续调用

来源:互联网 发布:淘宝客如何地推 编辑:程序博客网 时间: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请按任意键继续. . .
原创粉丝点击