C ++:正确的格式来初始化派生和基础

时间:2017-06-03 06:53:01

标签: c++ inheritance initialization

我制作了一个可以保存月,日和年的日期类。但现在我有一个问题。 我已经使用这个带继承的日期类来存储例如人的Ctor(接待员,乘客等)(酒店)的dateOfBirth(事实上在人的初始化列表中使用日期类的Ctor) ),但现在我不知道我应该在main中初始化一个人的格式是什么?!反正我是否可以直接在主要的地方做到这一点?对不起,我是初学者。任何帮助赞赏。 这是我的代码的一些部分:

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));

我检查了对象的存储日期&#34; a&#34;并且它的日期返回1,1,1300,尽管如此,我也不知道该能做什么。 (顺便说一下,我定义一个与人分开的日期的原因是我超载了操作员 - 计算乘客的停留时间)

1 个答案:

答案 0 :(得分:1)

您需要做的就是将括号更改为大括号(即代码编译,而不是设计良好且不产生-Wreorder警告):

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

- list initialization

带括号的版本等同于(逗号运算符):

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

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