在构造函数

时间:2017-06-15 06:24:44

标签: c++ class constructor

我的构造函数假设只接受一个变量。但我很好奇你是否初始化了构造函数定义中不存在的其他变量。

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的任何实例现在都有时间加倍为0.并且getter函数是否能够在没有setter的情况下获取此信息?

WordAnalysis::WordAnalysis(int arrSize){

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

3 个答案:

答案 0 :(得分:2)

是的,您可以在构造函数中初始化其他成员变量, 即使它没有采取相应的论点。

但是,在上面给出的示例中:

WordAnalysis::WordAnalysis(int arrSize){

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

你实际上并没有初始化timesDoubled成员变量,因为你在它之前写了“int”,它声明了一个新变量并将其设置为0。

如果要设置类timesDoubled变量,则必须编写:

timesDoubled = 0;

或者如果你想更明确一点,你甚至可以写:

WordAnalysis::timesDoubled = 0;

答案 1 :(得分:1)

是。您可以。但是,您可以在声明时对数据成员进行类内初始化。您应该使用initializer list和构造函数来初始化所需的数据成员。所有数据成员都在构造函数中可见。您可以在其中分配其值。从技术上讲,使用initializer list是初始化,当使用赋值运算符(=)时,它在ctor内部为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,以允许数据成员的类内初始化。

答案 2 :(得分:1)

我建议定义一个默认构造函数,例如:

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

这样就可以初始化类的所有实例。