gpt4 book ai didi

C++在复制构造函数中初始化列表赋值并在复制构造函数中崩溃

转载 作者:行者123 更新时间:2023-11-28 04:56:01 25 4
gpt4 key购买 nike

我在重新定义初始化列表中定义的值时遇到问题。我想在复制构造函数中重新定义它。我将抛出一些示例代码。我还有一个问题,就是我的程序一旦进入我的复制构造函数的 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());

}

}

最佳答案

如果我正确理解您的问题,您希望 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();
}

一些额外的编码技巧:

  1. 当声明成员变量时,我会使用m__ 前缀来区分局部变量。这样您就不必一直使用 this,从长远来看可以加快编码速度。
  2. 密切关注您在 for 循环中使用的临时变量 - 您声明了 int x = 0,然后在 时使用了 obj.tools[i] >i 在本地范围内不存在。
  3. 您可以使用 // 注释代码,或使用 /* comment */ 包围注释 block 。 ***** 不会注释掉代码。
  4. 如果可能,我会避免将成员变量初始化为 nullptr。这可能会在稍后尝试操作它们时变得困惑,因为它可能会导致空指针错误。

关于C++在复制构造函数中初始化列表赋值并在复制构造函数中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47117200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com