有一個日期(Date)類的對象和一個時間(Time)類的對象,均已指定了內容,要求一次輸出其中的日期和時間

????????可以使用友元成員函數。在本例中除了介紹有關友元成員函數的簡單應用外,還將用到類的提前引用聲明,請讀者注意。
編寫程序:

運行結果:

程序分析:
????????在一般情況下,兩個不同的類是互不相干的。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等成員。讀者可以上機調試一下。
????????說明: 一個函數( 包據普通函數和成員函數)可以被多個類聲明為"朋友",這樣就可以引用多個類中的私有數據。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41482.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41482.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41482.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于Java異常機制及finally關鍵字的詳解

異常機制(Exception) 軟件程序在運行過程中,非常可能遇到異常問題。常見的異常: 1、用戶輸入錯誤 2、設備錯誤 3、硬件問題,例如打印機關掉、服務器問題 4、物理限制:磁盤滿了 Java是采用面向對象的方式來處理異常的。 處理過程…

基于Java的水果商品銷售網站

1 水果商品銷售網站概述 1.1 課題簡介 隨著電子商務在當今社會的迅猛發展,水果在線銷售已逐漸演變為一種極為便捷的購物方式,日益受到人們的青睞。本系統的設計初衷便是構建一個功能完備、用戶體驗友好的水果銷售平臺,致力于為用戶提供優質、…

Xcode簡介

Xcode 是蘋果公司為 macOS 平臺開發的一款集成開發環境(Integrated Development Environment,IDE),主要用于開發 iOS、iPadOS、macOS、watchOS 和 tvOS 的應用程序。Xcode 包含了一系列的軟件開發工具,涵蓋了從編寫代碼…

【植物大戰僵尸雜交版】獲取+存檔插件

文章目錄 一、還記得《植物大戰僵尸》嗎?二、在哪下載,怎么安裝?三、雜交版如何進行存檔功能概述 一、還記得《植物大戰僵尸》嗎? 最近,一款曾經在15年前風靡一時的經典游戲《植物大戰僵尸》似乎迎來了它的"文藝復…

漸開線花鍵測量學習筆記分享

大家好,繼續漸開線花鍵的相關內容,本期是漸開線花鍵測量相關的學習筆記分享: 花鍵檢測項目有花鍵大徑和小徑檢驗;內花鍵齒槽寬和外花鍵齒厚,以及漸開線終止圓 和起始圓直徑檢測;齒距累計誤差 、齒形誤差 、…

排序算法簡述(第八jiang)

目錄 排序 選擇排序 O(n2) 不穩定:48429 歸并排序 O(n log n) 穩定 插入排序 O(n2) 堆排序 O(n log n) 希爾排序 O(n log2 n) 圖書館排序 O(n log n) 冒泡排序 O(n2) 優化: 基數排序 O(n k) 快速排序 O(n log n)【分治】 不穩定 桶排序 O(n…

Mysql-常用函數及其用法總結

1、字符串函數 測試用例如下: 1.1 CONCAT() 將多個字符串連接成一個字符串。 SELECT CONCAT(first_name, , last_name) AS full_name FROM users; -- 期望結果:John Doe, Jane Smith, Michael Johnson 1.2 SUBSTRING() 提取子字符串 SELECT SUBSTR…

STM32-PWR和WDG看門狗

本內容基于江協科技STM32視頻學習之后整理而得。 文章目錄 1. PWR1.1 PWR簡介1.2 電源框圖1.3 上電復位和掉電復位1.4 可編程電壓監測器1.5 低功耗模式1.6 模式選擇1.7 睡眠模式1.8 停止模式1.9 待機模式1.10 庫函數 2. WDG看門狗2.1 WDG簡介2.2 IWDG框圖2.3 IWDG鍵寄存器2.4 …

13 學習總結:指針 · 其一

目錄 一、內存和地址 (一)內存 (二)內存單元 (三)地址 (四)拓展:CPU與內存的聯系 二、指針變量和地址 (一)創建變量的本質 (二…

Ansible常用模塊

華子目錄 Ansible四個命令模塊1.組成2.特點3.區別3.1command、shell模塊3.2raw模塊 4.command模塊4.1參數表4.2free_form參數 5.shell模塊5.1作用5.2例如 6.script模塊6.1示例 7.raw模塊7.1參數7.2示例 文件操作模塊1.file模塊1.1參數1.2示例 2.copy模塊2.1參數 Ansible四個命令…

用4個方法檢查家里的燈是否傷孩子的眼睛

為什么小孩子帶眼鏡的越來越多?      現在的孩子都在樓上玩手機看電視,當然它就傷眼睛了      除了這些電子產品傷眼睛,還有一處隱形的因素被忽略了      你主要看4個標準      1,你看看燈的照度,有些…

ASRock Creator系列GPU:為AI推理及多GPU系統打造,采用16針電源接口的Radeon RX 7900系列顯卡

ASRock 正在籌備推出專為人工智能推理和多GPU系統設計的AMD GPU——Creator系列顯卡。這一系列顯卡采用雙槽位、吹風式設計,并配備16針電源連接器,首發產品包括基于Navi 31架構的AMD Radeon RX 7900XTX和RX 7900 XT型號。這些原屬于WS系列的顯卡最初在20…

2024年華為OD機試真題-小朋友來自多少小區-C++-OD統一考試(C卷D卷)

2024年OD統一考試(D卷)完整題庫:華為OD機試2024年最新題庫(Python、JAVA、C++合集) 題目描述: 幼兒園組織活動,老師布置了一個任務:每個小朋友去了解與自己同一個小區的小朋友還有幾個。我們將這些數量匯總到數組garden中。 請根據這些小朋友給出的信息,計算班級小朋…

機器學習與現代醫療設備的結合:革新醫療健康的未來

🎬 鴿芷咕:個人主頁 🔥 個人專欄: 《C干貨基地》《粉絲福利》 ??生活的理想,就是為了理想的生活! 引言 隨著技術的不斷進步,機器學習(Machine Learning, ML)在現代醫療設備中的應用正在改變著…

python基礎語法 006 內置函數

1 內置函數 材料參考:內置函數 — Python 3.12.4 文檔 Python 解釋器內置了很多函數和類型,任何時候都能直接使用 內置函數有無返回值,是python自己定義,不能以偏概全說都有返回值 以下為較為常用的內置函數,歡迎補充…

【華為OD題目0008-雙十一】

華為OD題目0008-雙十一 華為OD題目0008-雙十一 華為OD題目0008-雙十一 題目描述 雙十一眾多商品進行打折銷售,小明想購買一些自己心儀的商品, 但由于受購買資金限制,所以他決定從眾多心意商品中購買3件, 而且想盡可能的花完資金&…

什么是CTO?如何成為一名優秀的CTO?

一、什么是CTO? 首席技術官(CTO)是一位負責領導和管理企業技術戰略的高級職務。CTO的主要職責包括規劃技術戰略、監督研發活動、領導技術團隊等。 二、CTO的主要職責 首席技術官,即CTO,是企業中負責技術和研發的高級管…

Redies基礎篇(一)

Redis 是一個高性能的key-value數據庫。Redies支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的&#xff…

【ETABS】【RHINO】案例:Swallow to ETABS

文章目錄 01. Swallow Overview總覽1 LOAD:Defination of LoadCase、Response Combo2 SectionArea Section and Area Load(面截面定義與指定,面荷載指定)Frame Section with rebarattr and linear load(帶鋼筋屬性框架…

下載,連接mysql數據庫驅動(最詳細)

前言 本篇博客,我講講如何連接數據庫?我使用mysql數據庫舉例。 目錄 下載對應的數據庫jar 包 百度網盤 存有8.4.0版本壓縮包:鏈接:https://pan.baidu.com/s/13uZtXRmuewHRbXaaCU0Xsw?pwduipy 提取碼:uipy 復制這…