2010-07-25 101 views
4

我有接受一个对象作为参数的方法。操纵数据成员(C++)

两个呼叫者和参数具有相同的构件(它们是相同的类的实例)。

在该方法中,特定成员进行比较,然后,基于该比较,需要操纵参数对象中的一个成员:

class Object { 

    // members 

public: 

someMethod (object other) { 

    int result; 
    member1 - other.member1 = result; 
    other.member2 = other.member2 - result; 

} 

的唯一事情是,它实际上并不改变其它成员2超出这个范围,并且变更需要是永久性的。

所以,是的,对不起,我需要对指针的意见......我已经在网上和书看,但我无法得到它的工作。我想你们中的一个人会在大约30秒内看到这个并且知道答案。我有RFTM,并且处于一个愚蠢的损失。我不鼓励。

谢谢大家!

+3

小心:C++是类型敏感的。我假定当你为这个问题重新输入时,引入了'类Object'和'object other'之间的区别,但是你可能想要确保这个case在你的实际代码中是一致的。 – 2010-07-25 20:04:09

+2

另外,您不能在作业的左侧使用减法。应该是'result = member1 - other.member1;'? – 2010-07-25 20:05:13

+0

是的,你的建议在实际代码中已经被考虑到了!谢谢。 – 2010-07-25 20:12:41

回答

8

这是因为你在传递价值(相当于传递一份拷贝,认为它是让某人拷贝一份文件,然后要求他们进行修改,但你仍然拥有原始文件,所以他们所做的修改将会获得当你收回它时,它不会反映在你的副本中,但是,如果你告诉他们你的副本位于何处,他们可以去修改它,以便下次访问时看到它)。您需要可以参考与

Object& object 

或指针传递给目标对象

Object * object 

退房this page为的区别的讨论。

+0

非常感谢!对此,我真的非常感激。这正是我期待的! – 2010-07-25 20:11:30

4

您正在向someMethod函数传递副本other。尝试传递参考代替:

someMethod(object &other) { ... 

当你传递一个副本时,更改为other.member2只修改副本而不是原始对象。传递一个参考,但是,让other参数在将呼叫传递给someMethod(obj)原始对象。

+2

作为一个方面说明:将复杂对象作为副本传递是很昂贵的。因此,即使对象在方法内部没有改变,通常也可以将它作为const引用传递。这样可以避免复制,并保证调用者不会更改对象。 – ollb 2010-07-25 20:06:50