引數不同名字相同友元函式是同乙個函式嗎

時間 2021-06-03 04:27:33

1樓:

友元的宣告僅僅指定函式對類成員的訪問許可權,不是「真正的」函式宣告。

如果要在其它檔案中呼叫display(),必須在標頭檔案中專門對display()進行宣告,且必須宣告2種過載形式。顯然,在類外部宣告的display()不是類的成員函式,是普通函式,所以兩個不同引數的display()就是函式過載。

你把所有的宣告和定義都寫在了乙個檔案裡,並且display()的定義在main()函式之前,所以display()雖然沒有顯示地被宣告,但是依然可以被main()函式呼叫。

再說點別的問題:

你的建構函式寫法需要改進,

Date

::Date

(intm,

intd

,inty)

這樣寫出來的建構函式實際行為是:先使用預設初始化,將成員month、day、year進行初始化,再對三個成員分別賦值。

如果成員是const型別,這樣的寫法是會出錯的。

應該寫成這樣:

Date

::Date

(intm,

intd

,inty)

:month(m

),day(d

),year(y){}

2樓:藍色

是的,友元函式的不同型別引數是函式過載。要確定這一點其實很簡單,就是看編譯出來的符號表即可。

命令依次是:

這裡的nm是讀取符號表,c++filt是把符號表的C++函式Name Mangling轉化為可讀的格式

我們可以看到display函式在符號表中並不屬於了Date或者Time類了,如同乙個「普通」的函式接收不同的型別,那麼就自然是函式過載了。

你可以把友元函式改為成員函式以後,按照我這種方式,看看符號表有什麼不同。

有哪些同乙個事物被翻譯成不同名字導致大家難以分辨的情況 ?

說幾組類似關係的詞 題主說的是因為翻譯版本不同,而導致不同翻譯版本被當作是不同東西的情況。我下面舉的則是原本就存在的不同詞,原本以為是不同的東西,但翻譯了之後,才發現它們是同一樣東西或至少某種意義上的同樣東西。雄心 野心 這個是這一類中最典型的,英文為ambition,我喜歡你和你的ambition...

同一道題裡,f x 和 f y 是同乙個函式嗎?

夢醒未央 函式兩要素 定義域 對應法則 對應法則顯然一樣,都是f 全為function 定義域是不一樣的 實際上,第二個的定義域是 0,4 註明 變數並不影響,例如f x f y 這種並未指明x,y關係的,此題中x與x 1有代數關係。故不是乙個函式。個人見解,僅作參考。 jiangjiehui 這本...

C 中 可以將 不同型別的函式指標 放在 同乙個vector中嗎?

劉春雷 我覺得可以這樣子,對於引數不同的函式 方法1 假如有2個函式fun1,fun2 這兩個函式的引數不同,可以利用多型將這兩個函式變成相同的格式 std string fun1 std string str1 std string fun2 std string str1,std string ...