我遇到了重新定义初始化列表中定义的值的问题。我想在复制构造函数中重新定义它。我会抛出一些示例代码。我也有一个问题,我的程序一旦进入我的复制构造函数的for循环就崩溃了。看到那里疯狂的事情?似乎没有在没有崩溃的情况下使它脱离for循环。
头文件中的:
class Calculator : public Tool {
private:
int numberKeys;
Tool** tools;
public:
Calculator();
Calculator(const Calculator& obj);
CPP文件中的:
Calculator::Calculator()
:Tool("MyCalculator"),
numberKeys(0),
tools(nullptr)
{
}
Calculator::Calculator(const Calculator& obj )
{
numberKeys=obj.numberKeys;
tools = new Tool*[numberKeys];
*****How do I define :Tool("MyCalculator"),
*****to :Tool("YourCalculator"),
for (int x = 0; x < numberKeys; x++){
this->tools[x] = (obj.tools[i]->clone());
}
}
答案 0 :(得分:1)
如果我理解你的问题,你希望Calculator
的默认构造函数和复制构造函数将不同的字符串传递给父(基)类。
为此,请使用与默认构造函数相同的分配列表格式。因此,复制构造函数的定义如下所示:
Calculator::Calculator(const Calculator& obj)
: Tool("YourCalculator"), numberKeys(obj.numberKeys) {
tools = new Tool*[numberKeys];
for (int i = 0; i < numberKeys; i++) tools[i] = obj.tools[i]->clone();
}
额外的一些编码提示:
m_
或_
前缀来从本地变量中取代。这样您就不必继续使用this
,从长远来看可以加快编码速度。int x = 0
,然后在本地范围内obj.tools[i]
不存在时使用i
。 //
对代码发表评论,或使用/* comment */
围绕评论区。 *****
不会注释掉代码。nullptr
。稍后在尝试操作它们时可能会感到困惑,因为它可能会导致空指针错误。