C ++:为什么这些函数使用向量的不同副本?

时间:2016-08-29 21:50:51

标签: c++ variables pointers object instances

我遇到类函数在向量的不同副本上进行更改而不是在相应对象的实例中保存的更改的问题。

主要功能说明: 这是主要功能。它首先创建一个类Menno的对象Mats,该对象使用其构造函数进行初始化,并且具有一个名为int的{​​{1}}类型的私有向量,其值为F 。然后,它用于创建名为-1的类Calculator的对象。对象Calli保存在Menno中名为Mats的{​​{1}}类型的私有对象变量中。最后,Matrices的{​​{1}}函数返回Calli,并在此对象变量上执行Matrices,这会更改getMatrices()中的值并且应该始终更改Calli

问题: 从执行程序后可以看出,printF()F所做的更改不会保存在对象变量F中。这使我认为构造函数中printF()的初始化效果很好,但函数然后使用此向量的其他副本而不是保存的副本。

背景 作为Java编码器,我被建议在大多数情况下使用指针,但我仍然无法理解为什么这段代码没有按预期工作。我最近调查了C ++作为一种编程语言,通过了newbostons视频指南并打印出了语法列表,但他们在这里没有帮助我。任何解释都表示赞赏!

setf()

1 个答案:

答案 0 :(得分:3)

由于

 Mats getMatrices();

返回类成员的副本。更改它以通过引用返回它:

 Mats &getMatrices();

请注意,通过引用返回类成员具有您需要了解的某些分支。你会在你最喜欢的C ++书中找到所有细节。

这里发生的事情是你在Java中自我描述的背景正在阻碍。 C ++类的工作方式与Java的类完全不同。您需要忘记所有关于类的知识,正如您在Java中所了解的那样,并且从基础知识开始专注于学习C ++类的工作方式。