如何使用对象的自由函数

时间:2012-10-26 17:07:14

标签: c++

我正在尝试找出/明白如何使用自由函数访问对象的数据。

所以我的自由函数看起来像这样(无论如何都是标题):

#ifndef CDSUPPORTFUN_H
#define CDSUPPORTFUN_H

void DisplayCDS(CDX *pCD1, CDX *pCD2, CDX *pCD3);
void ShowCosts(CDX &CD1, CDX &CD2, CDX &CD3);
void MemoryReturn(CDX *pCD1, CDX *pCD2,CDX *pCD3);
#endif

然后我实现了每个人的工作。我的问题是,我准确地将什么输入到我的Main.cpp来访问这些功能?当我打电话给Main.cpp时,我必须传递哪些信息?

例如,当我使用:

DisplayCDS(pCD1, pCD2, pCD3);

我的数据按预期显示。然而这仍然是指针?如果我通过我的参考,应该怎么看?

-

编辑:由于ShowCosts通过引用传递,因此检索它的适当语法是:

CD1.ReturnCosts();

3 个答案:

答案 0 :(得分:0)

如果pCD1等是指针,那么ShowCosts(*pCD1, *pCD2, *pCD3);将传递引用。

答案 1 :(得分:0)

  

我的问题是,我准确地将什么输入到我的Main.cpp中以访问这些功能?当我打电话给Main.cpp时,我必须传递哪些信息?

首先,您必须包含声明它们的标头:#include "cdssupportfun.h"(或类似的)。其次,您需要传递函数签名中指定的参数:CDX*是指向CDX的指针,而CDX&表示它期望可以通过非{{{{1}传递的对象。 1}}引用 - 所以基本上是非临时的非const const对象。

CDX

具有指向DisplayCDS(pCD1, pCD2, pCD3); 的参数。要通过引用传递,您可以调用:

pCD1

取消引用指针,并通过引用传递它们指向的对象。

答案 2 :(得分:0)

要清理,有两种方法可以通过引用传递。您可以传递指针,指向对象的实例。或者将实际对象传递给函数,并让函数创建对这些对象的引用。用指针传递引用(你的方式):

将您的功能定义为:

void DisplayCDS(CDX *pCD1);

并在您的主页中,将其命名为:

CDX* pCD1;
*pCD1 = something;
DisplayCDS(pCD1);

或者,如果您不喜欢指针,则可以定义函数以获取引用并将实际对象传递给它而不是指针。要做到这一点:

将您的功能定义为:

void DisplayCDS(CDX& CD1);

并在您的主页中,将其命名为:

CDX CD1;
CD1 = something;
DisplayCDS(CD1);

这两种语法完成了同样的事情。您已传递对函数的引用而未复制该对象。请注意,现在您在函数中使用pCD1或CD1的方式会有所不同。如果使用指针,则必须将pCD1用作:

pCD1->CD1MemberVar = blah;

*pCD1.CD1MemberVar = blah;

如果您使用了第二种语法,您将能够正常使用函数中的对象:

CD1.CD1MemberVar = blah;

为了进一步演示指针是如何工作的,你也可以使用这个方法,它是前两个方法的组合,并且不必要地混淆。

将您的功能定义为

DisplayCDS(CDX& CD1);

在Main:

CDX* CD1;
*CD1 = something;
DisplayCDS(*CD1);

所有这些例子都应该有效...我更喜欢使用CDX&语法,以避免在所有地方使用*。并且 - >的。

编辑:正如评论中指出的那样,传递指针在技术上并不是“通过引用传递”。它传递一个指向内存中对象的对象(指针)。

相关问题