为什么我的c对象不会影响另一个c对象?
发布时间:2020-12-16 10:34:14 所属栏目:百科 来源:网络整理
导读:我有一个简单的c类,intHolder,它只包含一个int.它也可以添加到int,它可以工作,或者将自己添加到另一个intHolder中包含的另一个int,这不起作用.这与我在 Java中遇到的情况完全不同.这是怎么回事? class intHolder{private: int i;public: intHolder(int myIn
我有一个简单的c类,intHolder,它只包含一个int.它也可以添加到int,它可以工作,或者将自己添加到另一个intHolder中包含的另一个int,这不起作用.这与我在
Java中遇到的情况完全不同.这是怎么回事?
class intHolder{ private: int i; public: intHolder(int myInt){i = myInt;} void addToInt(int inc){ i = i + inc;} void printInt(){cout << i << endl;} void addToOtherInt(intHolder other){other.addToInt(i);} }; 主要方法 int main () { intHolder ih1(1); ih1.printInt();//Should be 1,is 1 ih1.addToInt(3); ih1.printInt();//Should be 4,is 4 intHolder ih2(2); ih2.printInt();//Should be 2,is 2 ih1.addToOtherInt(ih2); ih1.printInt();//Should be 4,is 4 ih2.printInt();//Should be 6,is 2 }; 解决方法
您是按值传递intHolder.这意味着该函数作用于本地副本,因此对调用方没有影响.你需要传递一个参考:
void addToOtherInt(intHolder& other) { other.addToInt(i); } ^ 请注意,通常当您拥有包含支持算术运算的其他类型的类型时,您可以提供重载运算符,以便您可以执行以下操作 intHolder a = 5; intHolder b = 10; intHolder c = a + b; c += 42; a = 42 - b; 等等.有关更多信息,请参见this extensive discussion on operator overloading. 而且,对于“印刷”,习惯上过载ostream& amp;运算符<< ;,然后允许您流式传输到各种流,包括但不限于std :: cout.例如: struct Foo { int i; }; std::ostream& operator<<(std::ostream& o,const Foo& f) { return o << f.i; } 可以让你说 Foo f; std::cout << f; std::cerr << f; std::ofstream tmp("foo.txt"); tmp << f; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |