2017-06-15 32 views
0

我的構造函數假設只有一個變量。但是我很好奇你是否可以初始化構造函數定義中沒有的其他變量。構造函數在構造函數中設置的初始化和私有變量

class WordAnalysis{ 
private: 
    int timesDoubled; 
    word *words; 
    int wordCount; 
    int index; 
    void doubleArrayAndAdd(string); 
    bool checkIfCommonWord(string); 
    void sortData(); 
public: 
    bool readDataFile(char*); //returns an error if file not opened 
    int getWordCount(); 
    int getUniqueWordCount(); 
    int getArrayDoubling(); 
    void printCommonWords(int); 
    void printResult(int); 
    WordAnalysis(int); 
    ~WordAnalysis(); 

};

例如:WordAnalysis的任何實例現在都有timesdoubled爲0,並且getter函數能夠在沒有setter的情況下獲取此信息?

WordAnalysis::WordAnalysis(int arrSize){ 

wordCount = arrSize; 
int timesDoubled = 0; 
int index = 0; 
} 
+2

我建議你拿起[一本好書](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)並開始閱讀。 –

回答

2

嗯,是的,你可以在構造函數初始化其他成員變量, 即使不採取相應的參數。

然而,在本例中,你上面給:

WordAnalysis::WordAnalysis(int arrSize){ 

wordCount = arrSize; 
int timesDoubled = 0; 
int index = 0; 
} 

你實際上並沒有初始化timesDoubled成員變量,因爲你之前寫的「詮釋」,這是宣告一個新的變量和設置,爲0

如果你想設置的類timesDoubled變量,你必須寫:

timesDoubled = 0; 

或者,如果你想更明確的話,你可以通過電子郵件ven寫道:

WordAnalysis::timesDoubled = 0; 
+0

我花了數小時試圖弄清楚這一點,它很簡單,因爲在它之前刪除int。謝謝你,先生/女士! –

1

是的。您可以。但是,您可以在聲明中對數據成員進行類內初始化。您應該使用帶構造函數的initializer list來初始化您所需的數據成員。所有的數據成員在構造函數中都是可見的。您可以在其中分配它們的值。從技術上講,使用initializer list是初始化,在使用賦值運算符(=)時,在內部是assignment

這裏的是你的代碼與註釋的片段:

class WordAnalysis 
{ 
private: 

    // Data member initialization on declaration 

    int timesDoubled { 0 }; 
    word* words   { nullptr }; 
    int wordCount  { 0 }; 
    int index   { 0 }; 

public: 

    // Initializing timesDoubled using initializer list 

    WordAnalysis(const int t) : timesDoubled{ t } 
    { 
     // Assign default values here if need be 

     index = 10; // assignment 
    } 

    // ... 
}; 

你的編譯器應該至少C++11 compliant,讓數據成員在類初始化。

1

我建議定義了默認的構造函數,例如:

WordAnalysis() 
{ 
    timesDoubled = 0; 
    words[0] = '\0'; //assuming it's an array of char 
    wordCount = 0; 
    index = 0; 
} 

這樣的類的所有實例將被初始化。