【发布时间】:2021-05-08 09:37:03
【问题描述】:
我有两节课。 如您所见,第一个类的实例是第二个类的属性。当我尝试创建第二个类的实例时,它会在第二个类的构造函数之前调用第一个类的构造函数。有什么办法可以预防吗?
class Date {
int jour;
int mois;
int annee;
public:
Date();
Date(int, int, int);
};
class personne {
protected:
string nom;
string prenom;
string CIN;
Date date_de_naissance;
public:
personne();
personne(string, string, string, Date);
};
【问题讨论】:
-
initialization order 在 C++ 规范中是固定的。
-
这个XY problem 太过分了。为什么你认为你需要改变初始化顺序?这应该解决什么问题?
-
我正要添加一个答案,但重新阅读后,我不确定我是否理解了这个问题,但我仍然把这个作为评论:你可以调用 Date 的复制构造函数在 personne 的构造函数中: personne(string n, string pn, string cin, Date date) : nom(n), prenom(pn), CIN(cin), date_de_naissance(date) {}
-
没有。类的成员在包含类构造函数的主体开始之前被初始化(包括调用它们的构造函数,如果他们有的话)。您可以使用构造函数初始化程序列表更改成员的初始化方式(但不是初始化顺序)。
-
您可以反转事物并将
personne放入Date中。更重要的是,澄清你到底为什么要在组件之前构建一些东西?