いくつかの条件でクラスへのポインタを取得するために、C++で関数を作成します。私はクラスの複数のインスタンスを持っていて、番号で識別されています。番号に応じて、対応するインスタンスを取得したい。 C#でC++のC#と同じです。
はそれはのようになります。
class main
{
private Example item1;
private Example item2;
private Example item3;
private Example item4;
public bool InitializeItem(int itemID)
{
bool isInitialized = false;
Example item;
if (tryGetItem(itemID, out item))
{
item = new Example(itemID);
isInitialized = true;
}
return isInitialized;
}
private bool tryGetItem(int itemID, out Example item)
{
bool canGet = false;
item = null;
switch (itemID)
{
case 1:
item = item1;
canGet = true;
break;
case 2:
item = item2;
canGet = true;
break;
case 3:
item = item3;
canGet = true;
break;
case 4:
item = item4;
canGet = true;
break;
}
return canGet;
}
}
class Example
{
int number { get; set; }
public Example(int i)
{
number = i;
}
}
しかし、C++で、私は少しの参照とポインタと混同です。 this one(フランス語)のようなチュートリアルを読んだ。私は基本的なポインタを理解しましたが、クラスと機能で私は失われています。最初の答えを
は、私はに私のコードを変更:
Example item1;
Example item2;
Example item3;
Example item4;
bool tryGetItem(int b, Example &ptr)
{
bool canGet = false;
ptr = NULL;
switch (b)
{
case 1:
ptr = item1;
canGet = true;
break;
/* etc */
}
return canGet;
}
bool InitializeItem(int id)
{
bool isInit = false;
Example ptr = NULL;
if (getParam(id, ptr))
{
ptr = Example(id);
isInit = true;
}
return isInit;
}
しかし、それは動作しません。私は、デバッグしようとしましたgetParam(1, ptr)
が真です、{..}変数ptr
は正しく設定されていますが、item1
は変更されません。
編集: 私はそれが可能な重複投稿と同じ問題だとは思わない。 ptr
をtryGetItem
に変更したくない場合はtryGetItem
を使用してptr
を私のitemX
の1つにする必要があります。 tryGetItem
に値1を使用した後、ptr
を変更すると、item1
も変更する必要があります。
"参照渡し" "&'を検索し、[良いC++本](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を読んでください – UnholySheep
C++作品はC#とは異なる方法で終了します。オブジェクトは通常あなたが扱うように扱われ、 'int'は例えばC#で扱われます。 C++のオブジェクトは通常、「ヒープ上のオブジェクトへの参照」ではなく、「オブジェクトが単なるintなのでオブジェクトは単なるもの」 –
一般に、出力を返す方が出力パラメータよりも優先されます。 –