首页 > 其他分享 >有一个日期(Date)类的对象和一个时间(Time)类的对象,均已指定了内容,要求一次输出其中的日期和时间

有一个日期(Date)类的对象和一个时间(Time)类的对象,均已指定了内容,要求一次输出其中的日期和时间

时间:2024-07-07 22:27:46浏览次数:12  
标签:函数 对象 日期 Time Date 声明 display

        可以使用友元成员函数。在本例中除了介绍有关友元成员函数的简单应用外,还将用到类的提前引用声明,请读者注意。
编写程序:

运行结果:

程序分析:
        在一般情况下,两个不同的类是互不相干的。display函数是Time类中的成员函数,它本来只可以用来输出Time类对象中的数据成员hour,minute,sec。现在在Date类中把它声明为"朋友",因此也可以访问Date类对象中的数据成员mouth,day,year。所以在display函数中既可以输出Time类的时、分、秒,又可以输出其"朋友"类的对象中的年、月、日。注意,在输出本类对象的时、分、秒时,不必使用对象名,而在输出Date类的对象中的年、月、日时,就必须加上对象名(如d.month)。如果不用友元函数,为了实现题目要求,就要在两个类中分别包括两个输出函数(如display1,display2),在主函数中分别调用这两个函数,先后输出日期和时间。显然用友元函数方便。
        请注意在本程序中调用友元函数访问有关类的私有数据方法:
        (1)在函数名display的前面要加display所在的对象名(如t1)。
        (2)display 成员函数的实参是Date类对象d1,否则就不能访问对象d1中的私有数据。
        (3)在Time::display函数中引用Date类私有数据时必须加上对象名,如d.month。

注意:在本例中声明了两个类Time和Date。程序第3行是对Date类的声明,因为在第7行和第16行中对display函数的声明和定义中要用到类名Date,而对Data类的定义却在其后面。能否将Date类的声明提到前面来呢?也不行,因为在 Date类中第 4行又用到了Time类,也要求先声明Time类才能使用它。这就形成了"连环套",类似于"鸡生蛋,蛋生鸡"的问题。为了解决这个问题,C++允许对类进行"提前引用"的声明,即在正式声明一个类之前,先声明一个类名,表示此类将在稍后声明。程序第3行就是提前引用声明,它只包含类名,不包括类体。如果没有第3行,程序编译就会出错。有了第3行,在编译时,编译系统会从中得知 Date是一个类名,此类将在稍后定义。
        有关对象提前引用的知识:在一般情况下,对象必须先声明,然后才能使用它。但是在特殊情况下(如本例所示的这样),在正式声明类之前,需要使用该类名。但是应当注意:类的提前声明的使用范围是有限的。只有在正式声明一个类以后才能用它去定义类对象。如果在上面程序第3行后面增加一行:
        Date d1;        //试图定义一个对象
会在编译时出错。因为在定义对象时是要为这些对象分配存储空间的,在正式声明类之前,编译系统无法确定应为对象分配多大的空间。编译系统只有在"见到"类体后,才能确定应该为对象预留多大的空间。在对一个类做了提前引用声明后,可以用该类的名字去定义指向该类型对象的指针变量或对象的引用(如在本例中,display的形参是Date类对象的引用)。这是因为指针变量和引用与它所指向的类对象的大小无关。
        请注意程序是在定义Time::display函数之前正式声明Date类的。如果将对Date类的声明的位置(程序第13~21行)改到定义Time::display函数之后,编译就会出错,因为在Time::display函数体中要用到Date类的成员month,day,year。如果不事先声明Date类,编译系统无法识别成员 month,day,year等成员。读者可以上机调试一下。
        说明: 一个函数( 包据普通函数和成员函数)可以被多个类声明为"朋友",这样就可以引用多个类中的私有数据。

标签:函数,对象,日期,Time,Date,声明,display
From: https://blog.csdn.net/2301_80138271/article/details/140227647

相关文章

  • 解决《龙珠斗士Z》游戏启动问题:api-ms-win-crt-runtime-l1-1-0.dll文件缺失的详细指南
    对于热爱格斗游戏和《龙珠》系列的玩家来说,《龙珠斗士Z》无疑是一款令人兴奋的作品,它以其精美的画面、流畅的战斗体验以及对原作角色的精彩还原而受到广大玩家的喜爱。然而,在享受这场动漫与格斗完美融合的盛宴之前,一些玩家可能会遇到一个让人头疼的技术问题——游戏启动时提示......
  • 按指定日期重复
     问题:根据D1指定的日期将A2:C8区域进行重复公式1(姓名)右拉下拉完成=INDEX(A:A,MOD(ROW(A1)+COUNTA(A:A)-2,COUNTA(A:A)-1)+2)公式2(日期)下拉完成=SUBSTITUTE(LEFT(D$1,FIND("-",D$1)-1),".","/")+(ROW(A1)-1)/(COUNTA(A:A)-1)公式3(全部)动态数组=LET(a,COUNTA(A:A)-1,b,SUM......
  • Java日期时间操作工具类:DateTimeUtil
    在Java开发中,处理日期和时间是一个常见的需求,无论是数据库查询、日志记录还是业务逻辑处理,都离不开对日期时间的精确操作。Java自JDK8起引入了新的日期时间API,如java.time包下的LocalDate,LocalTime,LocalDateTime,ZonedDateTime等,这些API相比之前的java.util.Date和java.t......
  • Uptime-kuma 监控
    简介监控HTTP(s)/TCP/HTTP(s)关键字/HTTP(s)Json查询/Ping/DNS记录/推送/Steam游戏服务器/Docker容器的正常运行时间通过Telegram、Discord、Gotify、Slack、Pushover、电子邮件(SMTP)和90+通知服务发送通知准备工作Centos7docker-ce安装docker......
  • 【Undertale AU】Chaotic Time Trio 填词
    推销CTT。有好听的歌。有好看的动画。有感人(确信)的剧情。有很帅的betrayer。有可爱的晨曦_wx(chara_ecr可爱w)。来看我发癫……Phase1【ChaoticTimeTrio】EII-OST-009-Phase1-AChaoticEncounter[V1](相会阡途)_哔哩哔哩_bilibiliChaotictimetrioPhase1......
  • 日期类&异常类
    日期类&异常类作业:千位数字相乘publicstaticvoidmain(String[]args){//两个千位数字相乘int[]arr1={7,8,9,9,8,9};int[]arr2={7,9,8,9,6,8};//定义结果的数组int[]result=newint[12];for(inti=0;......
  • linux timezone
      packages/tzlocal/unix.py",line56,in_get_localzonewithopen(tzpath,'rb')astzfile:IsADirectoryError:[Errno21]Isadirectory:'/etc/timezone   检查/etc/timezone:确保/etc/timezone是一个文件,而不是一个目录。 ls-l/etc/tim......
  • 为什么现在连Date类都不建议使用了?
    一、有什么问题吗java.util.Date?java.util.Date(Date从现在开始)是一个糟糕的类型,这解释了为什么它的大部分内容在Java1.1中被弃用(但不幸的是仍在使用)。设计缺陷包括:它的名称具有误导性:它并不代表a Date,而是代表时间的一个瞬间。所以它应该被称为Instant——正如它的ja......
  • 日期类
    第一代日期类Date:精确到毫秒名代表特定的瞬间配合使用的有SimpleDateFormat:格式和解析日期的类;格式化和解析日期的具体类。它允许进行格式化(日期到文本)、解析(文本到日期)和规范化注意:Date类是在java.util中。默认输出国外日期格式。publicclassDate_{publicstaticvo......
  • MySQL 字符串日期格式转换
    在MySQL中,经常需要将字符串类型的日期转换成日期或时间类型,或者在不同的日期格式之间进行转换。MySQL提供了几种方法来实现这一点,包括使用STR_TO_DATE()和DATE_FORMAT()函数。1.使用STR_TO_DATE()函数STR_TO_DATE()函数可以将字符串转换成日期或时间格式。它接受两个主要参......