1

我试图找出/了解您如何使用免费函数访问对象的数据。

所以我的免费功能看起来像这样(无论如何标题):

#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();
4

3 回答 3

0

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

于 2012-10-26T17:11:27.317 回答
0

我的问题是,我究竟应该在 Main.cpp 中输入什么来访问这些功能?当我调用它们时,我必须在 Main.cpp 中传递哪些信息?

首先,您必须包含声明它们的标题:(#include "cdssupportfun.h"或类似的)。其次,您需要传递函数签名中指定的参数:CDX*是指向 a 的指针,CDXCDX&意味着它需要一个可以通过非const引用传递的对象 - 所以基本上是一个非临时的非const CDX对象。

DisplayCDS(pCD1, pCD2, pCD3);

有作为参数的指针pCD1。要通过引用传递,您可以例如调用:

ShowCosts(*pCD1, *pCD2, *pCD3);

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

于 2012-10-26T17:15:10.527 回答
0

为了清楚起见,有两种方法可以通过引用传递。您可以传递指向对象实例的指针。或者您将实际对象传递给函数,并让函数创建对这些对象的引用。使用指针通过引用(您拥有它的方式):

将您的功能定义为:

void DisplayCDS(CDX *pCD1);

在您的 Main 中,将其称为:

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

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

将您的功能定义为:

void DisplayCDS(CDX& CD1);

在您的 Main 中,将其称为:

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

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

pCD1->CD1MemberVar = blah;

或者

*pCD1.CD1MemberVar = blah;

如果您使用第二种语法,您将能够像往常一样在函数中使用该对象:

CD1.CD1MemberVar = blah;

只是为了进一步演示指针的工作原理,您还可以使用这种方法,它是前两种方法的组合,并且不必要地令人困惑。

将您的功能定义为

DisplayCDS(CDX& CD1);

在主要:

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

所有这些示例都应该有效...我更喜欢使用 CDX& 语法来避免到处使用 *。和->的。

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

于 2012-10-26T17:49:39.977 回答