【发布时间】:2021-07-21 18:28:33
【问题描述】:
我正在尝试创建一个函数,用户可以在其中添加一个数据条目,因此该数组会动态地将其大小增加 1 并允许用户输入数据。
逻辑:
- 通过引用函数传递当前大小和数组指针
- 在函数中创建一个新的指针数组(动态分配),并将其大小增加 1。
- 将传入数组中的所有数据复制到新建的数组中
- 删除分配给参数指针的内存
- 将参数指针指向新的指针数组。
问题:我在类中有一个 const int 成员,按照上面的算法,当我尝试将内容复制到新指针时,很明显 id 不会被复制到 const 成员。 我有一种预感,我可以在这里使用带有初始化列表的复制构造函数,并在复制构造函数的帮助下初始化函数的新数组。
我需要知道如何使用复制构造函数复制动态分配的对象数组,此外,如果对象有一些 const 成员。
提前致谢。
类头:
#include <iostream>
#include <stdlib.h>
using namespace std;
class ramish
{
private:
const int id;
public:
void print()
{
cout << "ID = " << id;
}
ramish():id(rand()%100+1)
{
}
//ramish(ramish *& object)
//{
//}
};
功能和驱动程序:
int main()
{
int size = 4;
ramish* object = new ramish[size];
copypointer(object, size);
}
void copypointer(ramish*& object, int size)
{
ramish *newobject = new ramish[size + 1];
for (int i = 0; i < size; i++)
{
newobject[i]=object[i];//going to give error here due to const member
}
delete[]object;
//take inps from user for newobject[size]
object = newobject;
newobject = NULL;
}
【问题讨论】:
-
“我可以在这里使用带有初始化列表的复制构造函数”你试过吗?简单的解决方案是使成员不是
const。无论如何,没有办法从外部修改它,因为它已经是private。 -
是的,但我在复制指针数组和复制构造函数时遇到了问题
-
我们可以在声明对象时使用初始化列表为 const 成员赋值,就像上面的例子一样,我正在这样做。比我认为必须有一种方法可以在复制构造函数将参数指针复制到 newpointer 时循环参数指针索引。
-
不确定您的意思。
object = newobject;正在复制一个指针,与复制构造函数无关。如果您在代码中遇到编译器错误问题,请在问题中包含编译器错误。 -
我发现一个有用的经验法则是,“当你认为你想要一个 const 成员时,再想一想”。
标签: c++ arrays c++11 c++17 c++14