我的构造函数假设只接受一个变量。但我很好奇你是否初始化了构造函数定义中不存在的其他变量。
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;
}
答案 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;
}
这样就可以初始化类的所有实例。