2017-06-15 28 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; 
} 

这样的类的所有实例将被初始化。