C++类成员方法如何实现连续链式调用?以Complex类addTo方法为例
C++类方法链式调用实现方案
问题原因
你当前的编译报错是因为addTo方法返回值为void,调用a.addTo(a)后没有返回可用的类对象,自然无法继续调用后续的addTo方法。
实现方法
要实现链式调用,只需要让成员方法返回当前对象的左值引用即可:
- 将方法返回值从
void改为Complex&(注意必须是引用类型,不能是值类型) - 方法执行完成后返回
*this,this是指向当前调用对象的指针,解引用后就是当前对象本身。
注意:如果返回值用值类型
Complex而非引用Complex&,每次调用会生成临时拷贝对象,后续的方法调用只会修改临时对象,原对象a不会被后续调用修改,不符合预期。
修改后完整代码
#include <iostream> using namespace std; class Complex{ private: double real_; double imag_; public: // set方法也可以按同样逻辑改造,支持链式调用 Complex& set(double m, double n){ this->real_ = m; this->imag_ = n; return *this; } Complex& addTo(Complex add){ this->real_ += add.real_; this->imag_ += add.imag_; return *this; } // 加个打印方法验证结果 void print() const { cout << "real: " << real_ << ", imag: " << imag_ << endl; } }; int main(){ Complex a, b, c; a.set(1.1, 2.2); b.set(1.1, 2.2); c.set(1.1, 2.2); // 链式调用正常生效 a.addTo(a).addTo(b).addTo(c); a.print(); // 输出结果为 real:4.4, imag:8.8 符合计算逻辑 // 改造后的set也支持链式调用 Complex d; d.set(3.3,4.4).addTo(a).print(); return 0; }
内容的提问来源于stack exchange,提问作者Atoro
相关产品推荐
相关产品推荐

