_Phoebe__ 2022-03-17 11:04 采纳率: 96.9%
浏览 38
已结题

一道c++静态成员和友元的问题 要求显示日期和时间

按下列要求编程
(1)定义日期类CDate,包含年、月、日三个int型私有数据成员;
(2)定义时间类CTime,包含时、分、秒三个int型数据成员,以及一个CDate型数据成员;在CTime中定义一个函数void display( )函数,用于显示日期和时间;
(3)为类CDate和CTime编写必要的成员函数和构造函数;
(4)定义CTime的成员函数display(),输出日期和时间;
(5)把CTime的成员函数display()改为友元函数,并测试之;
(6)编写函数main(),定义CTime的对象,测试其成员函数并截图运行结果。

#include<bits/stdc++.h>
using namespace std;
class CDate{
    private:
        int year;
        int month;
        int day;
    CDate()
    {
        year=2022;
        month=3,day=4;
    }
    CDate(int y,int m,int d)
    {
        year=y;
        month=m;
        day=d;
    }
    CDate(CDate& d)
    {
        year=d.year;
        month=d.month;
        day=d.day;
    }
    ~CDate() {}
    int Gety()
    {
        return year;   //得到年份
    }
    int Getm()
    {
        return month;
    }
    int Getd()
    {
        return day;
    }
    void Set(int y,int m,int d)
    {
        year=y;    //设置时间
        month=m;
        day=d;
    }
};
class CTime{
    public:
        int hour;
        int min;
        int sec;
 //怎么定义CDate型数据成员
    
    void display()//怎么改成友元函数捏 
    {
        cout<<year<<"-"<<month<<"-"<<day<<endl;   //CDate用了private怎么调用year month 和day呢 
    }
};
 
int main()
{
    
    Date d1,d2(1999,9,9);
    d1.display();
    d2.display();
    d1.Set(2016,1,1);
    d1.display();
    cout<<d1.Gety()<<"-"<<d1.Getm()<<"-"<<d1.Getd()<<endl;
    return 0;
}


只能这样写了 编译通过不了 实现要求更不会 求解答 谢谢大家!

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2022-03-17 11:42
    关注

    编译报错信息贴出来看看
    为什么想在CTime类里来输出年月日呢?是想CTime中包含CDate吗?那可以用友元类

    #include<bits/stdc++.h>
    using namespace std;
    class CDate{
        private:
            int year;
            int month;
            int day;
        CDate()
        {
            year=2022;
            month=3,day=4;
        }
        CDate(int y,int m,int d)
        {
            year=y;
            month=m;
            day=d;
        }
        CDate(CDate& d)
        {
            year=d.year;
            month=d.month;
            day=d.day;
        }
        ~CDate() {}
        int Gety()
        {
            return year;   //得到年份
        }
        int Getm()
        {
            return month;
        }
        int Getd()
        {
            return day;
        }
        void Set(int y,int m,int d)
        {
            year=y;    //设置时间
            month=m;
            day=d;
        }
    };
    class CTime{
        friend class CDate;
        public:
            int hour;
            int min;
            int sec;
            CDate date;
            CTime(int y,int m,int d,int h ,int M,int s) : date(y,m,d) {hour = h;min = M;sec = s;}
        void display()//怎么改成友元函数捏 
        {
            cout<<date.year<<"-"<<date.month<<"-"<<date.day<<endl;   
            cout<<hour<<"-"<<min<<"-"<<sec<<endl;   
        }
    };
     
    int main()
    {
        
        CTime t1(2022,2,21,10,38,29);
        t.display();
        return 0;
    }
     
     
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月19日
  • 已采纳回答 4月11日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程