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 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错