2301_80655472 2024-02-26 18:41 采纳率: 0%
浏览 14
已结题

这个有点复杂 有没有人看看

img

面向对象的程序 希望能把过程也解释清楚 条理清晰通俗易懂(要不然我不明白

  • 写回答

21条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-26 18:41
    关注
    获得0.45元问题酬金

    引自免费微信小程序:皆我百晓生

    首先,我们将按照要求逐步分解并实现这个C++程序,涉及的主要部分包括四个函数和两个类的设计与实现:

    1. 判断闰年的函数:

      int leap(int year) {
       if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
           return 1; // 1 表示是闰年
       else
           return 0; // 0 表示不是闰年
      }
      
    2. 判断日期合法性的函数:

      int f(int y, int m, int d, int* m1, int* m2) {
       bool isLeap = leap(y);
       int daysInMonth[] = (isLeap ? m2 : m1);
      
       if (m < 1 || m > 12 || d < 1 || d > daysInMonth[m - 1])
           return 0; // 0 表示日期不合法
       else
           return 1; // 1 表示日期合法
      }
      
    3. 定义 date 类:

    class date {
    private:
        int year, month, day;
    
    public:
        date(int y, int m, int d) {
            year = y;
            month = m;
            day = d;
        }
    
        int get_year() { return year; }
        int get_month() { return month; }
        int get_day() { return day; }
    
        void show() {
            cout << year << "/" << month << "/" << day;
        }
    };
    

    4.定义 week 类:

    class week {
    private:
        date d1;
        int m1[12], m2[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int m2_leap[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int w;
    
    public:
        week(int y, int m, int d) {
            d1 = date(y, m, d);
            int *p1 = m1, *p2 = m2_leap;
            if (!leap(y)) p2 = m2;
            if (f(y, m, d, p1, p2)) {
                int sum = 0;
                for (int i = 2000; i < y; ++i) {
                    sum += leap(i) ? 366 : 365;
                }
                for (int i = 1; i < m; ++i) {
                    sum += (*p2)[i - 1];
                }
                sum += d;
                w = (sum + 5) % 7; // 2000年1月1日是星期六,所以加上5后模7得到对应星期几(0-6)
            } else {
                w = -1; // 若日期非法,则设置为-1
            }
        }
    
        int days() {
            // 此处省略,因为days()功能已经在构造函数里实现了
        }
    
        void fun0() {
            // 此处无需额外实现,因为在构造函数里已计算出w值
        }
    
        void print() {
            if (w == -1) {
                cout << "非法日期";
            } else {
                cout << "是星期" << (w == 0 ? "天" : (w == 1 ? "一" : (w == 2 ? "二" : ...)));
            }
        }
    };
    
    int main() {
        int y, m, d;
        cin >> y >> m >> d;
        week wd(y, m, d);
        wd.print();
        return 0;
    }
    

    以上代码定义了一个date类用于表示日期,并实现了一个week类用于计算给定日期是星期几。在week类的构造函数中,通过累加从2000年1月1日到给定日期的总天数,然后根据此天数计算出对应的星期几。最后,在main函数中实例化week对象并对输入的日期进行测试。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 创建了问题 2月26日

悬赏问题

  • ¥15 有没有人会打学生成绩管理系统呀
  • ¥15 在使用Fiddler和夜神模拟器抓包的时候一直出现443该怎么办啊QAQ搜了好几个笔记都没有解决
  • ¥15 3x7的二维数组A、B、C,A中的任意1个数组元素与B的任意1个数组元素、同时又与C的任意1个数组元素比较,把不同位置出现相同数的比较称为无意义,反之称为有意义,把有意义的比较打印输出。
  • ¥20 预测模型怎么处理原始数据(随机森林)
  • ¥20 请问discuz3.5如何实现插入ckplayer全能播放器功能呢?
  • ¥15 thingsboard代码编译出错误
  • ¥15 博途v18仿真报错怎么解决
  • ¥15 欧姆龙plc枕式包装机 ST编程
  • ¥15 为啥快手广告联盟的广告这么难出来
  • ¥15 k8s集群重启后,kubelet一直报systemctl restart kubelet.service "Failed to delete cgroup paths"