嗨,我是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中创建一个新的全部作品时,我仍然遇到问题:
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个参数的对象我得到一个错误。 (我不想改变主())
我该怎么办?
感谢您的回答。
答案 0 :(得分:0)
您的Oeuvre
构造函数想要通过复制传递的Auteur
来初始化auteur
对象。但是,您已删除了编译器生成的copy-constructor。
您有两种选择:
Auteur
Auteur
构造函数。第二个选项如下:
Oeuvre(string titre, string nom, bool prime, string langue)
:titre_(titre), auteur_(nom, prime),langue_(langue)
{}
答案 1 :(得分:0)
我的回答是删除(我的意思是删除你的复制构造函数声明),并简单地允许默认的工作。这两个类都具有可以复制构造或分配类型的属性。因此,我很困惑为什么你需要首先删除复制构造函数。
class Auteur
{ public:
Auteur( string nom, bool prime=false) : nom_(nom), prime_(prime) {}
// Get rid of the below statement
/*Auteur( const Auteur& a)=delete; */
~Auteur() {}
private:
// types are easily copyable so there is no reason to define your own or delete
// the defaults
string nom_; // string can easily deep copy itself
bool prime_; // bool is built in type
};
其他班级也是如此。只需使用默认值即可复制它们。