2017-10-12 197 views
-1

我想在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

+5

搜索「通過引用傳遞」&'並閱讀[良好的C++書](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – UnholySheep

+0

C++作品退出與C#不同。通常像處理對象一樣處理對象,而在C#中處理「int」。 C++中的對象通常不是「引用堆上的某個對象」,而更像是「對象只是對象,因爲整數只是整數」 –

+0

通常,返回輸出優於輸出參數。 –

回答

2

使用引用:

bool tryGetItem(int b, Example & var) 
{ 
} 

您可以使用它很簡單:

int main() 
{ 
    Example var; 
    tryGetItem(42, var); 
} 

除非真有必要,因爲沒有其他解決方案可用,avoir在C++中使用裸指針,喜歡引用或智能指針。在你的情況下,參考是最好的選擇,並會爲你完美效仿out

+0

感謝您的回答。我嘗試了你的解決方案,但是當我做'tryGetItem(2,var);'(指向'item2')和'var = Example(2)'時,變量'var'被正確設置爲2,但'item2'不會改變。 –