C++ C++;:构造函数:新实例中的父类参数和设置值
我正在尝试使用继承创建日期和时间类 父类Date具有变量month、day和year 日期派生类DateTime具有相同的变量,但添加了小时、分钟和秒。DateTime实例在创建时必须传递一个日期实例,并带有可选参数hour、minute和second。日期参数是一项要求。如果未传递可选参数,将应用默认值0 有没有更有效的方法来实现这一点?我觉得通过使用Date实例中的函数为新的DateTime实例检索参数来重新设置参数是很乏味的C++ C++;:构造函数:新实例中的父类参数和设置值,c++,inheritance,C++,Inheritance,我正在尝试使用继承创建日期和时间类 父类Date具有变量month、day和year 日期派生类DateTime具有相同的变量,但添加了小时、分钟和秒。DateTime实例在创建时必须传递一个日期实例,并带有可选参数hour、minute和second。日期参数是一项要求。如果未传递可选参数,将应用默认值0 有没有更有效的方法来实现这一点?我觉得通过使用Date实例中的函数为新的DateTime实例检索参数来重新设置参数是很乏味的 DateTime::DateTime(Date passDate
DateTime::DateTime(Date passDate){
day = passDate.getDay();
month = passDate.getMonth();
year = passDate.getYear();
hour = 0;
minute = 0;
second = 0;
}
DateTime::DateTime(Date passDate, int hourSet){
day = passDate.getDay();
month = passDate.getMonth();
year = passDate.getYear();
hour = hourSet;
minute = 0;
second = 0;
}
DateTime::DateTime(Date passDate, int hourSet, int minuteSet){
day = passDate.getDay();
month = passDate.getMonth();
year = passDate.getYear();
hour = hourSet;
minute = minuteSet;
second = 0;
}
您可以使用默认构造函数参数来创建单个构造函数
DateTime::DateTime(Date passDate, int hourSet=0, int minuteSet=0, int secondSet=0) {
day = passDate.getDay();
month = passDate.getMonth();
year = passDate.getYear();
hour = hourSet;
minute = minuteSet;
second = secondSet;
}
如果省略了
hourSet=0
,minuteSet
或secondSet
参数中的任何一个,它们将自动替换为0
,您可以调用父类构造函数和默认参数值,使代码更加简洁:
DateTime::DateTime(const Date& passDate, int hourSet = 0, int minuteSet = 0):
Date(passDate) {
hour = hourSet;
minute = minuteSet;
second = 0;
}
您需要在这两个类中提供复制构造函数和赋值运算符,并对输入值进行适当的验证
这样,您只需要为基和派生实现getter/setter。您应该定义一个复制构造函数和赋值运算符,以更轻松地实现这一点。
Date
class是否有一个复制构造函数?不要忘记定义Date
copyconstructor@VadimProzorov是的,它仅在复制构造函数存在时工作。从这个问题上看,情况是否如此还不清楚。