C ++将参数传递给类的实例

时间:2015-01-28 10:36:54

标签: c++ class parameters

我正在调试一些用C ++编写的模拟软件,并且无法理解部分代码。

软件模拟在3D世界中移动的一些实体,并且可以设置它们的行为,使得它们从A到B的直线移动,围绕特定点螺旋移动,或遵循预定义的路线等。

当一个实体在模拟中移动时,会向用户呈现一些有关其移动的信息,例如:当前速度,航向(方向),到当前目标的距离,达到其当前所需的时间目标& ETA在那个地方等等。

我目前正在处理的错误是,ETA和“完成当前行程的时间”向用户显示的值不正确。

我在C ++源文件中遇到以下代码,该文件向用户显示此信息:

DateTimeAndZone fpETA(mCurrentTime);
SystemTimeTypes::addRelativeTimeToSystemTime(fpETA, flightPlanETA);

DateTimeAndZone是一个类,因此fpETA是该类的一个实例...我不明白的是mCurrentTime(也是DateTimeAndZone ),可以作为类实例的参数传递 - 看起来与参数传递给函数的方式相同。

如果我进入DateTimeAndZone类的定义,则在其末尾有一个return语句,返回static std::string_classname

有人可以向我解释一下如何将类传递为创建新类的参数吗?这有什么影响?这是否意味着新类将采用存储在现有类中的信息?或者我在这里缺少什么?

我在SO上遇到过这个问题,但它并没有真正回答我的问题... Passing a class object as an argument in C++

4 个答案:

答案 0 :(得分:1)

DateTimeAndZone fpETA(mCurrentTime);

这将调用DateTimeAndZone的构造函数,并定义参数。如果mCurrentTime是DateTimeAndZone对象,则默认情况下将调用复制构造函数,如果已定义,则调用DateTimeAndZone的复制构造函数。

答案 1 :(得分:0)

这称为复制构造函数。它通过从DateTimeAndZone对象复制数据来创建新的mCurrentTime对象。这种功能的签名通常是:

DateTimeAndZone (const &DateTimeAndZone);

如果查看具有该签名的方法的类定义,您应该看到这个特定的拷贝构造函数的作用。

答案 2 :(得分:0)

类可以像任何其他类型一样作为参数传递,您真的需要查看该构造函数的实现(如果没有文档)以查看它使用参数的内容。

通常使用这种类型的构造函数称为复制构造函数,有很多问题可以解释复制构造函数的使用以及随之而来的含义:

When do we have to use copy constructors?

The copy constructor and assignment operator

What is a copy constructor in C++?

What is the difference between a deep copy and a shallow copy?

答案 3 :(得分:0)

以下内容:

class DateTimeAndZone;
DateTimeAndZone fpETA(mCurrentTime);
// ^ this invokes:
DateTimeAndZone::DateTimeAndZone(const DateTimeAndZone &arg);

最后一行是DateTimeAndZone类的复制构造函数。此复制构造函数将创建一个新的DateTimeAndZone对象,该对象将保存您传递的参数的副本(在这种情况下为mCurrentTime)。

复制构造函数可以由编译器自动生成(您可以研究this slideshare以查看它是在哪种情况下)或用户定义的。