我目前正在为学校做一个大型项目,该项目分为6个里程碑。 在第一个里程碑中,我得到了要添加到我的文件中的代码,但我不知道如何对它们进行分类。 在模块化编程中分发代码的一般约定是什么?
这就是我得到的:
里程碑 1:日期类
要启动此项目,请从课程存储库克隆/下载里程碑 1,并对 Date 类中缺少的部分进行编码。
Date 类封装可由std::istream
读取和std::ostream
打印的日期,使用以下格式进行读取和写入:YYYY/MM/DD,其中 YYYY 表示年份的四位数值,MM 表示月份的两位数值,DD 表示月份中的某天的两位数值。
使用以下规范完成Date
类的实现:
预定义常量:
预先定义可接受的年份限制:
const int min_year = 2000
const int max_year = 2030
私人会员:
数据:
年份 – min_year 和 max_year 之间的四位整数
一年中的月份 – 介于 1 和 12之间的值(含 1 和 12
)月中的某天 – 介于 1 和当月天数之间的值(请参阅
mday(int,int)
下面描述的成员函数)– 请注意,二月有 29 闰年的天数。
用于将当前对象中存储的日期与另一个 Date 对象中存储的日期进行比较的比较器值。构造函数设置此值,公共运算符使用它来比较两个日期。(如果日期 1 的值大于日期 2 的值,则日期 1 比日期 2 更近;也就是说,日期 1 晚于日期 2)。
客户端可以引用的错误状态,以确定对象是否保存有效日期,如果不是,则日期的哪一部分有错误。可能的错误状态是在 Date 类标头中定义为宏的整数值:
NO_ERROR 0
-- 无错误 - 日期有效
CIN_FAILED 1
-- iStream 在信息输入时失败
YEAR_ERROR 2
-- 年份值无效
MON_ERROR 3
-- 月份值无效
DAY_ERROR 4
-- 日值无效
成员功能:
int mdays(int month, int year) const;
(此查询已 实施和提供)。 此查询返回month
year
的天数。
void errCode(int errorCode);
此函数将错误状态变量设置为上面列出的值之一。
公众成员:
构造 函数:
无参数(默认)构造函数:将对象初始化为安全空状态,并将错误状态设置为NO_ERROR
。使用 0000/00/00 作为安全空状态的日期,并将比较器值设置为 0。
三参数构造函数:在其参数中接受年、月和日的整数值。此构造函数按年、月和日的顺序检查每个数字是否在范围内。如果任何数字不在范围内,此函数将错误状态设置为适当的错误代码并停止进一步验证。
(使用 mday(int,int) 成员函数获取接收年份在接收月份中的天数。月份值可以介于 1 和 12 之间(含 1 和 12)。如果接收的所有数据都有效,则此构造函数将接收的值存储在当前对象中,计算比较器值,并将错误状态设置为 NO_ERROR。如果收到的任何数据无效,则此 构造函数将对象初始化为安全空状态,将比较器值设置为 0,并将错误状态设置为 NO_ERROR。
使用以下公式设置有效日期的比较器值: = 年 * 372 + 月 * 13 + 天
运营商
bool operator==(const Date& rhs) const;
bool operator!=(const Date& rhs) const;
bool operator<(const Date& rhs) const;
bool operator>(const Date& rhs) const;
bool operator<=(const Date& rhs) const;
bool operator>=(const Date& rhs) const;
如果两个对象不为空,则这些比较运算符返回将当前对象作为左侧操作数与另一个 Date 对象作为右侧操作数进行比较的结果。如果其中一个或两个为空,则这些运算符返回 false。
例如运算符
查询和修饰符
int errCode() const;
此查询以错误代码值的形式返回错误状态。
bool bad() const;
如果错误状态未NO_ERROR,则此查询返回 true。
std::istream& read(std::istream& istr);
此函数按以下格式从控制台读取日期:YYYY?MM?DD(例如 2016/03/24 或 2016-03-24)。此函数不会提示用户。如果 istr 在任何时候失败,此函数将错误状态设置为 CIN_FAILED,并且不会清除 istr。如果 istr 失败,则调用 istr.fail() 返回 true。如果你的 read() 函数成功读取数字,无论此输入过程的结果如何,此函数都会返回对 std::istream 对象的引用。
std::ostream& write(std::ostream& ostr) const;
此查询以下列格式将日期写入 std::ostream 对象:YYYY/MM/DD,然后返回对 std::ostream 对象的引用。 帮助程序函数:运算符<<此运算符使用 std::ostream 对象将日期打印到控制台。运算符>>此运算符使用 std::istream 对象从控制台读取日期。在这些运算符中使用读取和写入成员函数;不要将朋友用于这些运算符重载。在头文件中包括这两个运算符的原型。将其原型放在类定义之后。
我不确定你的目标是什么。但常见的做法是将项目划分为子项目目录。然后分隔header(.h, .hpp etc)
和source(.c, .cpp, .cxx etc)
文件。以单一责任原则为动力的部门