我试图使用继承创建日期和时间类。
父类Date有月,日和年变量。
Date派生类DateTime具有相同的变量,但添加了小时,分钟和秒。 DateTime实例在创建时必须传递Date实例,并带有可选参数hour,minute和second。 Date参数是一项要求。如果未传递可选参数,则将应用默认值0。
有更有效的方法来实现这个吗?我觉得通过使用Date实例中的函数检索新参数来重新设置参数是很繁琐的。
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;
}
答案 0 :(得分:1)
您可以调用父类构造函数和默认参数值,以使代码更简洁:
DateTime::DateTime(const Date& passDate, int hourSet = 0, int minuteSet = 0):
Date(passDate) {
hour = hourSet;
minute = minuteSet;
second = 0;
}
答案 1 :(得分: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
。
答案 2 :(得分:0)
您需要在两个类中提供复制构造函数和赋值运算符,并对输入值进行适当的验证。
有了这个,你只需要为base和derived实现getter / setter。