C++ C++;:初始化派生和基的正确格式
我制作了一个日期类,可以容纳月份、日期和年份。但现在我有一个问题。 我使用了这个带有继承的日期类来存储例如person的Ctor(实际上在person的初始化列表中使用了date类的Ctor)为person(接待员、乘客等)(一家酒店)存储的dateOfBirth,但是现在我不知道我主要应该使用什么格式来初始化person?!不管怎样,总的来说我能直接做吗?对不起,我是初学者。谢谢你的帮助。 以下是我代码的一些部分:C++ C++;:初始化派生和基的正确格式,c++,inheritance,initialization,C++,Inheritance,Initialization,我制作了一个日期类,可以容纳月份、日期和年份。但现在我有一个问题。 我使用了这个带有继承的日期类来存储例如person的Ctor(实际上在person的初始化列表中使用了date类的Ctor)为person(接待员、乘客等)(一家酒店)存储的dateOfBirth,但是现在我不知道我主要应该使用什么格式来初始化person?!不管怎样,总的来说我能直接做吗?对不起,我是初学者。谢谢你的帮助。 以下是我代码的一些部分: class date { int month = 1; vec
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...
};
我检查了对象“a”的存储日期,它的日期返回111300,然而,我不知道什么也可以完成这项工作。
(顺便说一句,我定义日期的原因是与person分开的,因为我重载了操作符-在其中计算乘客的停留时间)您需要做的就是将括号改为大括号(这是为了编译代码,而不是为了设计良好,也不是为了生成警告): - 带括号的版本等效于(逗号运算符):
在为参数提供默认值之前,我会三思而后行。你可能不需要它们。主题之外,
person
不是一个date
,person
应该有一个date
。我认为你想要的是将date
作为person
类的属性,而不是使用继承。一个人可以拥有日期的哪些属性或功能?出生日期显然就是日期。这并不意味着一个人就是一个日期。@M-J你不能用这种方式在person构造函数上复制dateOfbirth,你可以一个成员一个成员地复制。这是由于糟糕的设计,因为一个人不是date@M-出生日期-一个person
的数据成员。同时在日期
构造函数中忽略范围错误可能不是最好的主意。1998
被吞没了,因为它不是一个月的有效值,这进一步增加了调试问题时的混乱。@LogicStuff我以为默认构造函数没有用处,我不需要一个没有信息的人。这是一个愚蠢的理由吗!?(当一个新手试图诚实时就会发生这种情况8))@M-J你是对的,我假设你的日期必须是默认可构造的(例如,为了新纪元的开始),作为某种变通方法的一部分。@LogicStuff一个附属问题:我已经更正了我的设计,我是否应该更改问题中的代码以避免混淆可能的过路人?或者我应该让它保持原样?我只是不太熟悉这方面的惯例。非常感谢您的帮助。@M-J我不会这么做,因为这已经在评论中讨论过了,并且会使这些引用无效。或者它需要删除我答案中的最后两句话,以及大量标记为过时的评论——阅读时你也应该这样做,并删除最近的评论。
person a("Michael", "Deoran", "05174084", (4,17,1998));
person a("Michael", "Deoran", "05174084", {4, 17, 1998});
person a("Michael", "Deoran", "05174084", 1998);