C++基础:自定义日期类的实现与应用

在C++中,实现一个日期类(通常称为Date)可以是一个很好的学习面向对象编程(OOP)的练习。

图片[1]_C++基础:自定义日期类的实现与应用_知途无界

以下是一个简单的Date类的实现,它包含了年、月、日三个成员变量,并提供了一些基本的操作,如设置日期、获取日期、判断闰年等。

#include <iostream>  
#include <stdexcept>  
  
class Date {  
private:  
    int year;  
    int month;  
    int day;  
  
    // 判断是否为闰年  
    bool isLeapYear() const {  
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);  
    }  
  
    // 获取某个月的天数  
    int getDaysInMonth(int month) const {  
        static const int daysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};  
        if (month == 2 && isLeapYear()) return 29;  
        return daysInMonth[month - 1];  
    }  
  
public:  
    // 构造函数  
    Date(int y = 1900, int m = 1, int d = 1) : year(y), month(m), day(d) {  
        if (!isValidDate()) {  
            throw std::invalid_argument("Invalid date");  
        }  
    }  
  
    // 复制构造函数  
    Date(const Date& other) : year(other.year), month(other.month), day(other.day) {}  
  
    // 赋值运算符  
    Date& operator=(const Date& other) {  
        if (this != &other) {  
            year = other.year;  
            month = other.month;  
            day = other.day;  
        }  
        return *this;  
    }  
  
    // 检查日期是否有效  
    bool isValidDate() const {  
        if (year < 1 || month < 1 || month > 12 || day < 1 || day > getDaysInMonth(month)) {  
            return false;  
        }  
        return true;  
    }  
  
    // 设置日期  
    void setDate(int y, int m, int d) {  
        year = y;  
        month = m;  
        day = d;  
  
        if (!isValidDate()) {  
            throw std::invalid_argument("Invalid date");  
        }  
    }  
  
    // 获取日期  
    void getDate(int& y, int& m, int& d) const {  
        y = year;  
        m = month;  
        d = day;  
    }  
  
    // 打印日期  
    void printDate() const {  
        std::cout << year << "-" << std::setw(2) << std::setfill('0') << month << "-" << std::setw(2) << std::setfill('0') << day << std::endl;  
    }  
  
    // 其他可能的方法,如加法、减法、比较等...  
};  
  
int main() {  
    try {  
        Date date(2023, 3, 15);  
        date.printDate();  
  
        // 尝试设置一个无效的日期  
        // Date invalidDate(2023, 2, 30); // 这会抛出异常  
  
        // ...其他操作...  
  
    } catch (const std::invalid_argument& e) {  
        std::cerr << "Caught exception: " << e.what() << std::endl;  
    }  
  
    return 0;  
}

这个Date类包含了基本的日期操作,并且提供了错误检查机制,以确保日期是有效的。你可以根据需要添加更多的方法和功能,如日期加法、减法、比较等。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞66 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容