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*は へのポインターであり、非参照で渡すことができるオブジェクトを期待することCDXを意味します。したがって、基本的に非一時的で非オブジェクトです。CDX&constconst CDX

DisplayCDS(pCD1, pCD2, pCD3);

へのポインタをパラメータとして持っていますpCD1。参照渡しするには、たとえば次のように呼び出します。

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

これはポインタを逆参照し、それらが指すオブジェクトを参照によって渡します。

于 2012-10-26T17:15:10.527 に答える
0

わかりやすくするために、参照渡しには 2 つの方法があります。オブジェクトのインスタンスを指すポインターを渡すことができます。または、実際のオブジェクトを関数に渡し、関数にそれらのオブジェクトへの参照を作成させます。ポインターを使用して参照渡しするには(あなたが持っている方法):

関数を次のように定義します。

void DisplayCDS(CDX *pCD1);

メインでは、次のように呼び出します。

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

または、ポインターが気に入らない場合は、関数を定義して参照を取得し、ポインターではなく実際のオブジェクトを渡すことができます。これをする:

関数を次のように定義します。

void DisplayCDS(CDX& CD1);

メインでは、次のように呼び出します。

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

これら 2 つの構文は、同じことを実現します。関数への参照を渡しましたが、オブジェクトをコピーしていません。現在、関数で pCD1 または CD1 を使用する方法に違いがあることに注意してください。ポインターを使用する場合は、pCD1 を次のように使用する必要があります。

pCD1->CD1MemberVar = blah;

また

*pCD1.CD1MemberVar = blah;

2 番目の構文を使用した場合は、関数内でオブジェクトを通常どおり使用できます。

CD1.CD1MemberVar = blah;

ポインターがどのように機能するかをさらに説明するために、このメソッドを使用することもできます。これは、前の 2 つの組み合わせであり、不必要に混乱します。

関数を次のように定義します

DisplayCDS(CDX& CD1);

そしてメインで:

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

これらの例はすべて機能するはずです...あらゆる場所での * の使用を避けるために、CDX& 構文を使用することを好みます。そして→の。

編集:コメントで指摘されているように、ポインターを渡すことは、技術的には「参照渡し」ではありません。メモリ内のオブジェクトを指すオブジェクト (ポインター) を渡します。

于 2012-10-26T17:49:39.977 に答える