gpt4 book ai didi

c++ - 在 C++ 中调用的第二个构造函数(错误输出)

转载 作者:太空宇宙 更新时间:2023-11-04 15:40:01 25 4
gpt4 key购买 nike

我正在尝试做一件简单的事情,但突然卡在两者之间。在我的代码中,我试图调用一个只传递长度的构造函数,我的第一个构造函数初始化一个 size = length 的数组,所有元素都为 0。

然后我将数组传递给构造函数以赋予先前定义的数组其值

这是示例:

class myvector
{
int *arr;
int length;

public :
myvector(int);
myvector(int *);

};

myvector :: myvector (int len)
{
arr = new int [length = len];
for ( int i=0;i< length;i++)
{
arr[i] = 0;
}

}

myvector :: myvector ( int *ex)
{
for ( int i=0;i< length;i++)
{

cout << ex[i] << " " << length <<" ";
arr[i] = ex[i];
cout << arr[i]<< " ";

}
}

int main()
{

myvector v1(5);
int x[5] = {2,3,4,45,6};
v1 = x;

}

在我的第二个构造函数中,在第一个构造函数中定义的长度丢失了它的值,数组 arr 也丢失了它的值

我做了什么吗?请详细说明一下

最佳答案

我认为您不太了解调用构造函数的情况。 v1 = x 行没有将值放入在第一次构造函数调用期间分配的内存中。相反,它构造了一个 new myvector(使用第二个构造函数)并将其复制到 v1 中。您在第一次构造函数调用期间所做的事情丢失了。

听起来您想定义一个赋值运算符,而不是一个接受 int* 参数的构造函数。此外,通常您应该将单参数构造函数声明为 explicit 以防止此类事件意外发生。

关于c++ - 在 C++ 中调用的第二个构造函数(错误输出),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103788/

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