如何在另一个类中使用一个类并初始化列表
C++ How to use a class in another class with initialising 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_;
};
现在我想创建一个使用类author和其他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_;
};
谢谢你的回答。我不想改变复制常量。但我仍然有一个问题,当我试图创建一个新的Oeuvre 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;
}
由于程序需要构造函数(Oeuvre)的4个参数,并且在main()中我创建了一些只有3个参数的对象,我得到了一个错误。(我不想改变main())
我该怎么办?
谢谢你的回答
您的Oeuvre
构造函数希望通过复制传递的auteur
来初始化Auteur
对象。但是,您已经删除了编译器生成的复制构造函数。
你有两个选择:
- 启用复制构造函数并通过copy 初始化
- 通过转发参数使用用户定义的
Auteur
构造函数
Auteur
第二个选项看起来像这样:
Oeuvre(string titre, string nom, bool prime, string langue)
:titre_(titre), auteur_(nom, prime),langue_(langue)
{}
我的答案是删除(我的意思是字面上删除您的复制构造函数声明),并简单地允许默认的工作。这两个类都有可以复制构造或赋值类型的属性。因此,我很困惑,为什么你一开始就需要删除复制构造函数。
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
};
对于另一个类也是如此。只需允许它们使用默认值即可复制。
相关文章:
- 链表,将列表复制到另一个列表
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 我如何创建一个列表,然后从中创建两个列表,其中一个用于偶数,另一个用于奇数?
- 是否可以使用OpenMP并行化一个列表,该列表可以在每次迭代中添加新元素
- 打印一个列表给出错误,指出迭代器不可递减
- C++:从两个包含子类 (typedef) 的列表创建一个列表
- 在 std 列表中查找对象并将其添加到另一个列表
- 在c++中遍历一个列表并在另一个列表中搜索每个元素
- 我在 C++ 中创建了一个列表容器类,但它没有按预期工作
- 如何通过赋值运算符重载将一个列表复制到另一个列表上?C++
- 正在将指针复制到assign运算符中的另一个列表元素
- 在c++中传递一个列表作为返回类型
- 如何在c++中创建一个列表及其内容常量
- C++:如何将迭代器设置为另一个列表中的结构内的列表
- C++ std::sort 引用另一个列表的自定义比较函数
- 如何让数组在下一次输入之前显示数组内容的前一个列表?
- 如果我创建一个列表:<T>:迭代器,有没有办法重载++(增量)运算符?
- 我如何解码一个列表的列表
- 如何在c++中用一个目录中的所有文件夹填充一个列表框
- c++遍历一个列表来调用某个函数