友元函式與類內部的成員函式有什麼不同

2025-03-22 05:40:26 字數 1650 閱讀 2291

1樓:網友

最根本的區別:友元函式沒有這個類的物件的this指標,只能通過顯式引數修改類的物件,類內部的成員函式有乙個這個類的物件的this指標作為隱式引數,因此成員搏賀雹虛擬函式需要以的形式呼叫,而基肆派友元函式需要以bar(foo)的形式呼叫……

友元的友元函式

2樓:沉默門偶

友元函式是能夠訪問類中的私有成員的非成員函式。友元函式從語法上看,它與普通函式一樣,即在定義上和呼叫上與普通函式一樣。

友元關係不具對稱性。即 a 是 b 的友元,但 b 不一定是 a 的友元。 友元關係不具傳遞性。即 b 是 a 的友元,差液c 是 b 的友元,但是 c 不一定是 a 的友元。

作用及特點。

友元提供了不同類的成員函式之間、類的成員函式與一般函式之間進行資料共享的機制。通過友元,乙個不同函式或另乙個類中的成員函式可以訪問類中的私有成員和保護成員。c++中的友元為封裝隱藏這堵不透明的牆開了乙個小孔,外界可以通過這個小孔窺視內部的秘密。

友元的正確使用能提高程式的執行效率,但同時也破壞了類的封裝性和資料的隱藏性,導致程式可維護性變差。 下面舉一例子說明友元函式的應用說明:在該程式中的point類中說明了乙個友元函式distance(),它在說明時前邊加friend關鍵字,標識它不是成員函式,而是友元函式。

它的定義方法與普通函式定義一樣,而不同於成員函式的定義,因為它不需要指出所屬的類。但是,它可以引用類中的私有成員,函式體中,,,都是類的私有成員,它們是通過物件引用的。在呼叫友元函式時,也是同普通函式的呼叫一樣,不要像成員函式那樣呼叫。

本例中,和這是成員函式的呼叫,要用物件來表示。而distance(p1, p2)是友元函式的呼叫,它直接呼叫,不需要物件表示,它的引數是物件。(該程式的功能是已知兩點座標,求出兩點納巖的距離。

c++「友元函式」、「常成員函式」、「派生類、基類」的常見問題請教?

3樓:

派生類和基類之間的成員函式可以相互呼叫!

不同類之間的成員函式怎麼呼叫?

只有public的成員函式可以互相呼叫,非靜態函式一律生成例項後方可。

派生類怎麼呼叫基類的成員變數?

是通過定義為友元函式來呼叫基類的成員變數嗎?

如果是public或protected可以直接使用,private可以通過友元方式(強烈建議不要這樣做)

2.友元函式。

普通函式宣告為友元函式,可以訪問類的成員函式。

友元類可以訪問其他類的成員變數。

3.常成員函式可以引用成員變數,不同類的成員變數也可以引用嗎?

首先,常成員函式也是成員函式,和一般的成員函式唯一的區別是不能修改類的屬性。

4.靜態成員變數,不可以修改它的值。

通過物件和類名就可以呼叫。

類名不可以直接呼叫成員函式!

把成員函式申明為靜態函式,類名就可以呼叫成員函式!

其他類可以訪問這個類的。靜態成員變數嗎?

宣告為public的可以直接訪問,其他的可以通過友元方式(強烈建議不要這樣做)

5.虛擬函式。

把父類成員函式定義為虛擬函式。

通過指標去呼叫派生類的成員函式。

6.複製建構函式。

把物件進行傳遞。

基本這些就是學習c++函式常遇到的問題和疑問,在這裡請教大家了!

類的成員函式必須是函式,類别範本的成員函式必須是函式模板

不一定的 隨便找個例子就知道了 這種說法是 錯!的 c 類别範本的成員函式在外部實現時,為什麼每個 函式前面都要加template 那是給類做模板宣告 如 template class a template void a b 如果沒有template的話,就無法說明專a這個類是模板類了屬 c 中如何...

以下哪個基類中的成員函式表示純虛擬函式

virtual void vf int 和void vf int 0基類中的成員函式表示純虛擬函式。純虛擬函式是一種特殊的虛擬函式,在許多情況下,回在基類中不能對虛答函式給出有意義的實現,而把它宣告為純虛擬函式,它的實現留給該基類的派生類去做。這就是純虛擬函式的作用.在許多情況下,在基類中不能對虛擬...

c的類成員函式如何訪問全域性變數

假如有個全域性變數int a,存放於myfile.h檔案中,則在類中用,需要新增 include myfile.h extern int a 即可 一般情況下,假如沒有區域性宣告變數,就會呼叫全域性變數,如果宣告瞭區域性變數,則,區域性變數會遮蔽全域性變數。除非你指定呼叫全域性變數,加上作用域操作符...