[英]Copy constructor overloading an operator
我为课程分配了一个作业,并且收到了头文件,并且需要实现该课程的方法。 我在实现复制构造函数和重载=运算符时遇到麻烦。 这是一些头文件:
class MontaznaKuca
{
private:
double kvadratura;
string bojaFasade;
string vlasnik;
bool postojiVrt;
Kuhinja* kuhinja;
vector<Soba*> sobe; //Soba is a seperate class defined in another header
public:
MontaznaKuca(void);
MontaznaKuca(double kvadratura, string bojaFasade, string imaVrt);
MontaznaKuca(const MontaznaKuca& kuca);
~MontaznaKuca(void);
MontaznaKuca& operator=(const MontaznaKuca& kuca);
...
我的尝试吃了拷贝构造函数和=运算符重载
MontaznaKuca::MontaznaKuca(const MontaznaKuca& kuca) : sobe(kuca.sobe.size())
{
kvadratura = kuca.kvadratura;
bojaFasade = kuca.bojaFasade;
vlasnik = kuca.vlasnik;
postojiVrt = kuca.postojiVrt;
kuhinja = new Kuhinja;
kuhinja = kuca.kuhinja;
for (size_t i = 0; i < kuca.sobe.size(); ++i)
sobe[i] = new Soba(*kuca.sobe[i]);
}
MontaznaKuca& MontaznaKuca::operator=(const MontaznaKuca& kuca) : sobe(kuca.sobe.size())
{
kvadratura = kuca.kvadratura;
bojaFasade = kuca.bojaFasade;
vlasnik = kuca.vlasnik;
postojiVrt = kuca.postojiVrt;
kuhinja = new Kuhinja;
kuhinja = kuca.kuhinja;
for (size_t i = 0; i < kuca.sobe.size(); ++i)
sobe[i] = new Soba(*kuca.sobe[i]);
return *this;
}
我通过研究网络上的一些代码来做到这一点,而Visual Studio却给我一个错误
: constructor initializer lists are only allowed on constructor definitions
有人可以向我解释如何完成这两个功能,因为我完全迷路了。
编译器告诉您该错误:构造函数初始化列表仅允许在构造函数定义上使用。
您正在实现复制构造函数,因此不允许构造函数初始值设定项列表,并且仅当尝试在重载赋值运算符时使用它时才允许在构造函数上使用。 我建议您阅读以下文章: 在C ++中复制构造函数和=运算符重载:是否可以使用通用函数? 什么是复制和交换习语?
MontaznaKuca::MontaznaKuca(const MontaznaKuca& kuca)
{
kvadratura = kuca.kvadratura;
bojaFasade = kuca.bojaFasade;
vlasnik = kuca.vlasnik;
postojiVrt = kuca.postojiVrt;
kuhinja = new Kuhinja;
kuhinja = kuca.kuhinja;
for (size_t i = 0; i < kuca.sobe.size(); ++i)
sobe.push_back(new Soba(*kuca.sobe[i]) );
}
MontaznaKuca& MontaznaKuca::operator=(const MontaznaKuca& kuca)
{
// copy-swap idiom is a better approach.
kvadratura = kuca.kvadratura;
bojaFasade = kuca.bojaFasade;
vlasnik = kuca.vlasnik;
postojiVrt = kuca.postojiVrt;
delete kuhinja; //deallocate old memory
kuhinja = new Kuhinja;
kuhinja = kuca.kuhinja;
// before allocating new memory you need deallocate old memory
...
for (size_t i = 0; i < kuca.sobe.size(); ++i)
sobe.push_back(new Soba(*kuca.sobe[i]) );
return *this;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.