C :适当的格式以初始化派生和基础

C++: proper format to initialize derived and base along

本文关键字:派生 初始化 格式      更新时间:2023-10-16

我已经完成了一个可以举行的日期课程,该课程可以举行该月,一天和年度。但是现在我有一个问题。我已经使用了带有继承的日期课来存储,例如,人(接待员,乘客等((酒店((一家酒店(的人(实际上使用人的初始化列表中的日期类别(,但是现在我不知道我应该主要使用的人来初始化一个人的格式?无论如何,我是否可以直接做到这一点?对不起,我是初学者。任何帮助都赞赏。这是我代码的某些部分:

class date {
    int month = 1;
    vector<int>month_days{ 31,31,31,31,31,31,30,30,30,30,30,29 };
    int day = 1;
    int year = 1300;
//---------------------member functions:
public:
    date(int m = 1, int d = 1, int y = 1300) {
        if (m>0 && m <= 31) month = m;
        if (d>0 && d <= 31) day = d;
        if (y>0 && y <= 3000) year = y;
    }
//some other code...
};
class person:public date {
protected:
    string m_name;
    string m_familyName;
    string m_idNumber;
//---------------------member functions:
public:
    person(string name, string familyName, string idNumber, date dateOfBirth) 
        : m_name(name),m_familyName(familyName),m_idNumber(idNumber),date(dateOfBirth)
    {
}
//some other code...
};

这是我在主要中输入的内容,我知道它无法完成工作:

person a("Michael", "Deoran", "05174084", (4,17,1998));

我检查了对象" A"的存储日期,其日期返回1,1,1300,但是,我也不知道该工作也能做什么。(顺便说一句,我定义一个与人分开的日期的原因是,我在其中超载了操作员 - 计算乘客的住宿时间(

您需要做的就是将括号更改为牙套(即代码进行编译,不要进行精心设计,而不是产生-Wreorder警告(:

person a("Michael", "Deoran", "05174084", {4, 17, 1998});

- 列表初始化。

带有括号的版本相当于(逗号运算符(:

person a("Michael", "Deoran", "05174084", 1998);

在提供参数的默认值之前,我会三思而后行。您可能不需要它们。