[英]c++ constructor initialisation list
嗨,我是C ++中构造函数的新手。 我有一个带有以下构造函数的Auteur类,即复制构造函数和析构函数:
class Auteur
{ public:
Auteur( string nom, bool prime=false) : nom_(nom), prime_(prime) {}
Auteur( const Auteur& a)=delete;
~Auteur() {}
private:
string nom_;
bool prime_;
};
现在,我想创建一个使用Autheur类以及其他2个参数的新类。 我尝试过这种方法,但是没有用。 有人知道如何为Oeuvre编写正确的构造函数吗?
class Oeuvre
{ public:
Oeuvre(string titre, Auteur const& auteur_, string langue)
:titre_(titre), auteur(nom, prime),langue_(langue)
Oeuvre(Oeuvre const& o) =delete;
:titre_(o.titre_), auteur_(o.auteur_),langue_(o.langue_) {}
~Oeuvre() {}
public:
Auteur auteur_;
Auteur auteur;
string langue_;
string titre_;
};
谢谢您的回答。 我不想更改副本构造。 但是当我尝试在main中创建一个新的Oeuvre时,我仍然遇到问题:
int main()
{
Auteur a1("Victor Hugo"),
a3("Raymond Queneau", true);
Oeuvre o1("Les Misérables" , a1, "français" ),
o2("L'Homme qui rit" , a1, "français" );
return 0;
}
由于程序需要4个用于构造函数(Oeuvre)的参数,并且在main()中,我仅用3个参数创建了一些对象,但出现错误。 (我不想更改main())
我该怎么办?
感谢您的回答。
好吧, delete
d类Auteur
的copy构造函数,这意味着类似
Auteur a1("Victor Hugo");
Auteur a2(a1);
现在是非法的,因为a2
将从a1
复制构造。
类的构造函数的初始化列表与此没有不同。 您正在用几个参数构造o1
,其中一个恰好是a1
。 现在,在Oeuvre
的构造函数中,您正在使用复制构造函数从它初始化(即构造)成员auteur
,即delete
d!
解决此问题的方法有两种:
1-不要delete
Auteur
的副本构造函数。 由于此类似乎没有管理任何资源,所以很好。
2-为Oeuvre
的构造函数提供正确初始化Auteur
所需的参数。 我不会去做这件事,因为它当然与该课程无关。
有两件事:
鉴于这些事情:
#include <string>
class Auteur
{
public:
Auteur(std::string const& nom, bool prime=false)
: nom_(nom), prime_(prime)
{}
Auteur(Auteur const&) = delete;
private:
std::string nom_;
bool prime_;
};
。
class Oeuvre
{
public:
Oeuvre(std::string const& titre, std::string const& langue, Auteur& auteur)
: titre_(titre), langue_(langue), auteur_(auteur)
{ }
Oeuvre(Oeuvre const&) delete;
public:
const Auteur &auteur_;
std::string langue_;
std::string titre_;
};
。
int main()
{
Auteur a1("Victor Hugo"),
a3("Raymond Queneau", true);
Oeuvre o1("Les Misérables" , "français", a1),
o2("L'Homme qui rit" , "français", a1);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.