问题描述
我正在尝试创建一个函数,用户可以在其中添加数据条目,因此数组动态地将其大小增加 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;
}
解决方法
我可以在这里使用带有初始化列表的复制构造函数
是的,你可以:
class ramish
{
private:
const int id;
public:
void print()
{
cout << "ID = " << id << "\n";
}
ramish():id(rand()%100+1)
{
}
ramish(const ramish& other) : id(other.id)
{
}
};
int main() {
ramish a;
ramish b = a;
a.print();
b.print();
}
ID = 84
ID = 84
尽管您应该考虑从成员中删除 const
。你为什么让它const
?以至于无法修改。但它是私有的,即使它不是 const
,也无法从类外部修改它。然后就可以依赖编译器生成的拷贝构造函数(example)。