复制构造函数和操作符=(多个数组…)
copying constructor and operator= (multiple arrays...)
我必须为Reg类创建一个复制构造函数和赋值操作符=。但我有这些复杂的结构,不知道如何正确地复制它。所以,问题是,我如何创建类Reg -浅复制复制构造函数?另一个问题是,operator=应该是什么样子——它应该是Reg
的深层拷贝 struct TMoves
{
const char* ddate;
const char* sstreet;
const char* ccity;
public:
~TMoves()
{
delete [] ccity;
delete [] ddate;
delete [] sstreet;
}
};
struct TData
{
int stackmult;
const char* iid;
const char* nname;
const char* ssurname;
int pocet;
TMoves** moves;
public:
TData()
{
stackmult=1;
}
~TData()
{
delete [] iid;
delete [] nname;
delete [] ssurname;
for(int i=0;i<pocet;i++)
{
delete moves[i];
}
delete [] moves;
}
};
class Reg
{
public:
Reg ();
Reg (const Regr&);
~Reg();
Reg& operator= (const Reg &);
bool Add (const char* id, const char* name, const char* surname, const char* date, const char* street, const char* city );
bool Resettle ( const char* id, const char* date, const char* street, const char* city );
private:
static const int MAX=1000; //default lenght of pole
TData **pole;
int counter; // pole lenght counter - not important now
int multiplier; // used for realocating pole
};
Reg::Reg()
{
counter=0;
multiplier=1;
pole=new TData*[multiplier*MAX];
}
Reg::Reg(const Reg& out)
{
//... how?
}
Reg::Reg &operator= (const Reg& copy)
{
//... how?
}
方法添加-在这里我找到正确的位置(错误),我应该在哪里放置id -使用二进制搜索
int misto=counter;
pole[misto]=new TData;
char *temp = new char[12];
strcpy(temp, id);
pole[misto]->iid = temp;
temp = new char[strlen(name)+1];
strcpy(temp, name);
pole[misto]->nname = temp;
temp = new char[strlen(surname)+1];
strcpy(temp, surname);
pole[misto]->ssurname = temp;
pole[misto]->moves=new TMoves*[STAT];
pole[misto]->moves[0]=new TMoves;
temp = new char[strlen(city)+1];
strcpy(temp,city);
pole[misto]->moves[0]->ccity= temp;
temp = new char[strlen(date)+1];
strcpy(temp,date);
pole[misto]->moves[0]->ddate= temp;
temp = new char[strlen(street)+1];
strcpy(temp,street);
pole[misto]->moves[0]->sstreet= temp;
方法重新安置-我找到id -我必须找到我应该添加另一个信息(城市,街道,日期)的地方,我创建新的TMoves:
pole[misto]->moves[misto2]=new TMoves;
char *temp = new char[strlen(city)+1];
strcpy(temp,city);
pole[misto]->moves[misto2]->ccity= temp;
temp = new char[strlen(date)+1];
strcpy(temp,date);
pole[misto]->moves[misto2]->ddate= temp;
temp = new char[strlen(street)+1];
strcpy(temp,street);
pole[misto]->moves[misto2]->sstreet= temp;
这个话题可能会让人困惑,但是我的代码太长了,我"只"面对这两个复制问题。感谢您的宝贵时间和回复。
不要给复制构造函数和复制赋值操作符不同的语义。
默认情况下,两者都应该给出一个独立的副本。
复制构造函数的最佳实现是依赖成员的复制构造,而只使用编译器生成的复制构造。为此,请使用std::string
代替char*
,并使用std::vector
代替其他阵列。就这么简单。
对于作业的情况,您已经明确指示不要使用string
和vector
,定义您自己的这样的类。
相关文章:
- 从数组构造一个跨度<shared_ptr<T>><shared_ptr<void>>
- C++从函数指针数组调用函数
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- C++返回反向字符数组的函数
- 类数组插入函数
- 使用数组数组调用 C++ 函数
- 在 c++ 中将数字转换为矢量数组的函数
- 为什么我的数组或函数不起作用?
- 带有函数指针的数组构造函数
- 对象的数组-STD ::数组 - 构造函数初始化问题
- 将对象类型传递到std ::数组构造函数
- std::initializer_list 作为 std::数组构造函数
- 如何为我的类创建数组构造函数
- Constexpr类与数组构造函数方法
- 列表数组-构造函数和main()中的地址不匹配
- 数组构造函数继承
- 不安全的模板数组构造函数