我想在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
被正確設置爲1,但item1
不會改變。
編輯: 我不認爲這是可能重複的帖子相同的問題。我不想修改tryGetItem
中的ptr
,我想用tryGetItem
使ptr
指向我的itemX
之一。在使用值爲1的tryGetItem
後,修改ptr
也必須修改item1
。
搜索「通過引用傳遞」&'並閱讀[良好的C++書](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – UnholySheep
C++作品退出與C#不同。通常像處理對象一樣處理對象,而在C#中處理「int」。 C++中的對象通常不是「引用堆上的某個對象」,而更像是「對象只是對象,因爲整數只是整數」 –
通常,返回輸出優於輸出參數。 –