演化一个类#

下面以如何表示“日期”这个概念展开讨论如何演化一个类。

结构和函数#

可以使用结构表示“日期”:

struct Date {
    int y; // 年
    int m; // 月
    int d; // 日
};
Date today; // 命名对象
today
@0x7f69c9cfe028

可以使用 date 对象:

today.y = 2022;
today.m = 12;
today.d = 27;

today 对象可以表示为:

stateDiagram-v2 state today { y --> 2022 m --> 12 d --> 27 }

辅助函数#

为了操作一个类对象,需要定义一系列辅助函数。

比如,检查用户输入的日期是否格式正确,如何获得日期的后面的日期?

void init_day(Date& dd, int y, int m, int d)
{
    // 检查 (y,m,d) 是否合法
    // 如果是的话,用其来初始化 dd
    dd.y = y;
    dd.m = m;
    dd.d = d;
}
void add_day(Date& dd, int n)
{
    // 为 日期 dd 添加 n 天
    dd.d += n;
}

示例:

Date today;
init_day(today, 2021, 12, 1); // 检查错误的行为,当下只能人工检查
add_day(today, 5);

成员函数和构造函数#