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

C++ passing parameters to an instance of a class

本文关键字:实例 参数传递 C++      更新时间:2023-10-16

我正在调试一些用C++编写的仿真软件,但无法理解部分代码。

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

当实体在模拟中移动时,会向用户显示有关其移动的一些信息 - 例如:其当前速度,航向(方向),到当前目标的距离,到达该位置的当前目标和ETA所需的时间等。

我目前正在处理的错误是旅程的 ETA 和"完成当前路段的时间"向用户显示不正确的值。

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

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

DateTimeAndZone是一个类,所以fpETA是该类的一个实例......我不明白的是mCurrentTime(也是DateTimeAndZone)如何作为类实例的参数传递 - 似乎与参数传递给函数的方式相同。

如果我去定义 DateTimeAndZone 类,它的末尾有一个返回static std::string_classnamereturn语句。

谁能向我解释如何将类作为创建新类的参数传递?这有什么影响?这是否意味着新类将采用存储在现有类中的信息?还是我在这里缺少了什么?

我在 SO 上遇到了这个问题,但它并没有真正回答我的问题......在 C++ 中将类对象作为参数传递

DateTimeAndZone fpETA(mCurrentTime);

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

称为复制构造函数。它通过复制mCurrentTime对象对面的数据来创建新的DateTimeAndZone对象。此类函数的签名通常是:

DateTimeAndZone (const &DateTimeAndZone);

如果在类定义中查找具有该签名的方法,则应看到此特定复制构造函数的作用。

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

在一般使用中,这种类型的构造函数称为复制构造函数,有很多问题解释了复制构造函数的使用以及它们带来的含义:

我们什么时候必须使用复制构造函数?

复制构造函数和赋值运算符

C++中的复制构造函数是什么?

深拷贝和浅拷贝有什么区别?

以下内容:

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

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

复制构造函数可以由编译器自动生成(您可以研究此幻灯片共享以查看在哪些情况下它是或不是)或用户定义。