2013-03-28 35 views
3

的函數內的類的對象,說我有一個頭文件看起來像:C++使用類

# filename: header.h 
class myclass 
{ 
public: 
    int myVariable; # arbitrary member variable 
    foo(); # arbitrary function 
    myclass() # default constructor 
} 

現在可以說,我要實現我的一些構造[MyClass的()。 cpp文件: 我可以做類似於創建一個數組,對象,整數,任何東西 - 只是一些數組。 然後我可以循環訪問該數組,並在我的構造函數定義中填充

我問的原因是因爲我想我的任意成員函數foo()能夠改變這個數組。這導致了問題 - 我是否將myclass的對象傳遞給foo [foo(myclass myclassObject)?

或者我將這個對象的數組傳遞給foo()?

對此的任何澄清將不勝感激。我試圖儘可能地將該示例作爲非特定的示例,但仍然足以描述,以便每個人都瞭解該問題。謝謝!

回答

1

是的,你可以創建並從構造方法中「填滿」一個數組,因此它可以通過foo使用。的確,這是構造函數的目的(爲你設置一切)。

請注意,如果您希望foo()能夠使用該數組,則必須使數組成爲類定義的一部分。

myclass.h

class myclass { 
    private: 
     int* arr; // declared on the "heap" 
    public: 
     foo(); 
     myclass(int arraySize); 
}; 

MyClass的。cpp

#include "myclass.h" 
#include <stdio> 

myclass::myclass(int arraySize) :arr(new int[arraySize]) {} 

myclass::foo() { 
    // prints the elements of the array we declared earlier 
    for (int i = 0; i < 5; i++) { 
     std::cout << arr[i] << std::endl; 
    } 
} 
+0

'int [] arr' - 您不能保留未指定的數組大小。 – 2013-03-28 05:53:36

+0

非常感謝!我正要問一些語法,並且看到你在我即將添加評論時更新了它。 – Joker 2013-03-28 05:54:36

+0

Tony - 對於我的問題,數組的大小將保持不變,但如果在運行時間之前無法確定大小,將會有什麼解決方案? – Joker 2013-03-28 05:56:28

1

您的構造函數確實可以創建一個數組 - 問題是構造函數返回後該數組發生了什麼。

  • 一個合理的方法是將其保存在堆上 - 即創建new[]數組 - 但這就意味着你需要一個指針保持在陣列就可以訪問它。最簡單的方法是將一個指針對象添加到您的類成員數據中。然後foo()可以使用該指針訪問數組。不幸的是,您必須使用自定義拷貝構造函數,賦值運算符和析構函數(Google Rule of Three)或智能指針來確保正確複製,共享和銷燬數組。

  • 你的問題意味着我不想要一個數組數據成員,這當然是最簡單的解決方案。缺點是數組大小必須在編譯時選擇,而基於堆的數組可以在運行時調整大小。

  • 如果你在堆棧上創建它,那麼它將離開作用域並在之後不可訪問(任何試圖通過設置指針或引用來訪問它的嘗試都會導致未定義的行爲)。

  • 構造函數也可以將數據填充到靜態數組中,但顯然數組的生命期與該類的任何單個對象實例無關。你已經討論過創建數組的構造函數,因此可能不想這樣做。

+0

我真的很感激 - 找到它非常具有描述性。我發現我**大膽**做**大膽**想要一個數組數據成員,我只是不知道如何聲明它,直到我意識到我確實知道數組的大小。 – Joker 2013-03-28 05:59:08