我正在尝试找出/明白如何使用自由函数访问对象的数据。
所以我的自由函数看起来像这样(无论如何都是标题):
#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();
答案 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&语法,以避免在所有地方使用*。并且 - >的。
编辑:正如评论中指出的那样,传递指针在技术上并不是“通过引用传递”。它传递一个指向内存中对象的对象(指针)。