問題一:友元函數(shù)有什么作用,它主要用在哪些情況下? 定義格式(c++):

成都創(chuàng)新互聯(lián)專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、新建網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計、電子商務(wù)商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為新建等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
friend ();
分清成員函數(shù),非成員函數(shù)和友元函數(shù)
成員函數(shù)和非成員函數(shù)最大的區(qū)別在于成員函數(shù)可以是虛擬的而非成員函數(shù)不行。所以,如果有個函數(shù)必須進行動態(tài)綁定(見條款38),就要采用虛擬函數(shù),而虛擬函數(shù)必定是某個類的成員函數(shù)。關(guān)于這一點就這么簡單。如果函數(shù)不必是虛擬的,情況就稍微復(fù)雜一點。 (條款38: 決不要重新定義繼承而來的缺省參數(shù)值)
舉例
看下面表示有理數(shù)的一個類:
class rational {
public:
rational(int numerator = 0, int denominator = 1);
int numerator() const;
int denominator() const;
private:
...
};
這是一個沒有一點用處的類。(用條款18的術(shù)語來說,接口的確最小,但遠不夠完整。)所以,要對它增加加,減,乘等算術(shù)操作支持,但是,該用成員函數(shù)還是非成員函數(shù),或者,非成員的友元函數(shù)來實現(xiàn)呢?
當(dāng)拿不定主意的時候,用面向?qū)ο蟮姆椒▉砜紤]!有理數(shù)的乘法是和rational類相聯(lián)系的,所以,寫一個成員函數(shù)把這個操作包到類中。
class rational {
public:
...
const rational operator*(const rational rhs) const;
};
(如果你不明白為什么這個函數(shù)以這種方式聲明――返回一個const值而取一個const的引用作為它的參數(shù)――參考條款21-23。)
條款21: 盡可能使用const
條款22: 盡量用“傳引用”而不用“傳值”
條款23: 必須返回一個對象時不要試圖返回一個引用
現(xiàn)在可以很容易地對有理數(shù)進行乘法操作:
rational oneeighth(1, 8);
rational onehalf(1, 2);
rational result = onehalf * oneeighth; 運行良好
result = result * oneeighth; 運行良好
但不要滿足,還要支持混合類型操作,比如,rational要能和int相乘。但當(dāng)寫下下面的代碼時,只有一半工作:
result = onehalf * 2; 運行良好
result = 2 * onehalf; 出錯!
這是一個不好的苗頭。記得嗎?乘法要滿足交換律。
如果用下面的等價函數(shù)形式重寫上面的兩個例子,問題的原因就很明顯了:
result = onehalf.operator*(2); 運行良好
result = 2.operator*(onehalf); 出錯!
對象onehalf是一個包含operator*函數(shù)的類的實例,所以編譯器調(diào)用了那個函數(shù)。而整數(shù)2沒有相應(yīng)的類,所以沒有operator*成員函數(shù)。編譯器還會去搜索一個可以象下面這樣調(diào)用的非成員的operator*函數(shù)(即,在某個可見的名字空間里的operator*函數(shù)或全局的operator*函數(shù)):
result = operator*(2, onehalf); 錯誤!
但沒有這樣一個參數(shù)為int和rationa......
問題二:c++中 友元函數(shù) 是什么,有什么用 某些不是類方法的函數(shù)如果需要訪問類的私有成員就可以把這個函數(shù)聲明為這個類的友元函數(shù), 只是可以讓類外頭的函數(shù)訪問類的私有變量而已, 覺得能用到就用, 虛函數(shù)是多態(tài)時用到的東西和友元沒什么關(guān)系
問題三:在C++中,為什么要使用到友元函數(shù)呢?有什么好處呢?能否舉個例子 友元函數(shù)是指某些雖然不是類成員卻能夠訪問類的所有成員的函數(shù)。。類授予它的友元特別的訪問權(quán)。通常同一個開發(fā)者會出于技術(shù)和非技術(shù)的原因,控制類的友元和成員函數(shù)(否則當(dāng)你想更新你的類時,還要征得其它部分的擁有者的同意)。
舉個通俗的例子吧,
一個家庭,對一般的訪客開發(fā)的是客廳,廚房等,但臥室這樣的私人地方一般訪客是禁止訪問的,而好朋友 就可以進去了,
問題四:什么是友元?它的作用有哪些?什么是友元函數(shù)和友元類 友元函數(shù)是指某些雖然不是類成員卻能夠訪問類的所有成員的函數(shù)。。類授予它的友元特別的訪問權(quán)。通常同一個開發(fā)者會出于技術(shù)和非技術(shù)的原因,控制類的友元和成員函數(shù)(否則當(dāng)你想更新你的類時,還要征得其它部分的擁有者的同意)。
舉個通俗的例子吧,
一個家庭,對一般的訪客開發(fā)的是客廳,廚房等,但臥室這樣的私人地方一般訪客是禁止訪問的,而好朋友 就可以進去了,
問題五:友元函數(shù)的作用是什么? 讓一個不是類的成員函數(shù)的函數(shù)可以訪問修改類的私有變量
問題六:友元函數(shù)有哪些特點? 友元函數(shù)和友元類: 通過友元,一個普通函數(shù)或類的成員函數(shù)可以訪問另一個類的私有數(shù)據(jù)成員。 友元分為友元函數(shù)和友元類,關(guān)鍵字friend放在函數(shù)名之前,該函數(shù)就是友元函數(shù),放在類名之前,該類就是友元類。友元聲明在公有部分還是私有部分都不影響它的使用。 一個函數(shù)可以被多個類聲明為友元這樣就可引用多個類中的私有數(shù)據(jù)。 友元的關(guān)系是單向的,不是雙向的。 友元關(guān)系不能傳遞。 給個例子:
#includeusing namespace std;#includeclass Time{ public: Time(int,int,int); friend void display(Time );友元函數(shù)的聲明 private: int hour,minute,second;};
Time::Time(int h,int m,int s){ hour=h; minute=m; second=s;}
void display(Time t){ cout 問題七:C++中友元函數(shù)的優(yōu)缺點 C++中,定義一個類中的成員分為私有成員、受保護成員和公有成員,我們知道,這些私有成員和受保護的成員是無法通過對象直接訪問的,而是要通過調(diào)用公有成員函數(shù)從而間接的訪問這些私有成員,那假如我的程序中出現(xiàn)循環(huán)要重復(fù)訪問這個私有成員時,每次都要先通過調(diào)用公有成員間接的來訪問該私有成員,這將造成空間和時間上的大大浪費。
所以,我們就想怎么樣能夠使對象直接訪問這些私有成員呢?那我們就引入了友元這個概念,假設(shè)定義了一個A類,又定義了一個B類,如果我們想使B中的某個函數(shù)f1可以直接訪問A類中的私有成員,那我們就在該函數(shù)f1的前面加上friend。
嘿嘿 廢話比較多 只是想讓你更加深入的了解友元。
如果讓我說優(yōu)缺點的話(用我的話來說):
(1)優(yōu)點:可以使定義為友元函數(shù)或者友元類的函數(shù)直接訪問另一個類中的私有成員和受保護成員,提高效率,方便編程。
(2)缺點:破壞了類的封裝性,提供了安全漏洞
問題八:什么叫友元函數(shù)? 友元函數(shù)和友元類
采用類的機制后實現(xiàn)了數(shù)據(jù)的隱藏與封裝,類的數(shù)據(jù)成員一般定義為私有成員,成員函數(shù)一般定義為公有的,依此提供類與外界間的通信接口。但是,有時需要定義一些函數(shù),這些函數(shù)不是類的一部分,但又需要頻繁地訪問類的數(shù)據(jù)成員,這時可以將這些函數(shù)定義為該函數(shù)的友元函數(shù)。除了友元函數(shù)外,還有友元類,兩者統(tǒng)稱為友元。友元的作用是提高了程序的運行效率(即減少了類型檢查和安全性檢查等都需要時間開銷),但它破壞了類的封裝性和隱藏性,使得非成員函數(shù)可以訪問類的私有成員。
友元函數(shù) :
友元函數(shù)是可以直接訪問類的私有成員的非成員函數(shù)。它是定義在類外的普通函數(shù),它不屬于任何類,但需要在類的定義中加以聲明,聲明時只需在友元的名稱前加上關(guān)鍵字friend,其格式如下:
friend 類型 函數(shù)名(形式參數(shù));
友元函數(shù)的聲明可以放在類的私有部分,也可以放在公有部分,它們是沒有區(qū)別的,都說明是該類的一個友元函數(shù)。
一個函數(shù)可以是多個類的友元函數(shù),只需要在各個類中分別聲明。
友元函數(shù)的調(diào)用與一般函數(shù)的調(diào)用方式和原理一致。
友元類 :
友元類的所有成員函數(shù)都是另一個類的友元函數(shù),都可以訪問另一個類中的隱藏信息(包括私有成員和保護成員)。
當(dāng)希望一個類可以存取另一個類的私有成員時,可以將該類聲明為另一類的友元類。定義友元類的語句格式如下:
friend class 類名;
其中:friend和class是關(guān)鍵字,類名必須是程序中的一個已定義過的類。
例如,以下語句說明類B是類A的友元類:
class A
{
…
public:
friend class B;
…
};
經(jīng)過以上說明后,類B的所有成員函數(shù)都是類A的友元函數(shù),能存取類A的私有成員和保護成員。
使用友元類時注意:
(1) 友元關(guān)系不能被繼承。
(2) 友元關(guān)系是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應(yīng)的聲明。
(3) 友元關(guān)系不具有傳遞性。若類B是類A的友元,類C是B的友元,類C不一定是類A的友元,同樣要看類中是否有相應(yīng)的申明
問題九:友元函數(shù)與成員函數(shù)的區(qū)別? 友元函數(shù)是非成員函數(shù),可以在他的函數(shù)體中可以通過對象名訪問類的的私有和保護成員,一般情況下,它在類中聲明,在類外實現(xiàn)
友元函數(shù)不是遺傳的,這是基類函數(shù),一個朋友,不能繼承派生類B,也就是說函數(shù)不能訪問一個朋友B增加其成員(但是要注意,不能訪問B新成員,但也可以訪問基類的成員B)。
普通類的友元函數(shù),可以訪問類的所有成員:
#include iostream
classA{
friend void printElement(const A a);
public:
A(inttheElement):element(theElement){}
void print(){std::coutelementstd::endl;}
protected:
intelement;
};
void printElement(const A a){
std::couta.element;
}
這個printElement友元函數(shù)是可以訪問類A中的所有成員的,這是最簡單的一種友元關(guān)系。
擴展資料:
模板基類和模板派生類中的友元關(guān)系:模板派生類的友元函數(shù)可以訪問模板基類中的成員函數(shù),但是在訪問友元函數(shù)時要注意包含模板基類的類作用域解析器:
templatetypename T
classA{//沒有亂碼
public:
A(inttheElement):element(theElement){}
void print(){std::coutelementstd::endl;}
protected:
intelement;
};
templatetypename T
class B : public AT{
templatetypename C friend void printElement(const BC a);
public:
B(int theElement):AT(theElement){}
voidprint(){
? AT::print();
}
};
templatetypename T void printElement(const BT a){
std::couta.AT::element;
//一定要注意,使用模板基類中的成員的時候一定要加上基類的類作用域解析符!
友元是一種定義在類的外部的普通函數(shù)或類,但它需要在類體內(nèi)進行說明。為了與該類的成員函數(shù)加以區(qū)別,使用關(guān)鍵字friend,友元不是成員函數(shù),但它可以訪問類中的私有成員,這就破壞了類的封裝性和隱藏性。友元分為友元函數(shù)和友元類兩種。
友元函數(shù)能夠訪問類中的私有成員的非成員函數(shù),定義:friend 函數(shù)原型。例如:friend 函數(shù)返回值 函數(shù)名(參數(shù)列表)。
一、主體不同
1、類:是面向?qū)ο蟪绦蛟O(shè)計實現(xiàn)信息封裝的基礎(chǔ)。
2、函數(shù):是指一段在一起的、可以做某一件事兒的程序。也叫做子程序、(OOP中)方法。
二、特點不同
1、類:是一種用戶定義的引用數(shù)據(jù)類型,也稱類類型。每個類包含數(shù)據(jù)說明和一組操作數(shù)據(jù)或傳遞消息的函數(shù)。類的實例稱為對象。
2、函數(shù):分為全局函數(shù)、全局靜態(tài)函數(shù);在類中還可以定義構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、成員函數(shù)、友元函數(shù)、運算符重載函數(shù)、內(nèi)聯(lián)函數(shù)等。
三、規(guī)則不同
1、類:實質(zhì)是一種引用數(shù)據(jù)類型,類似于byte、short、int(char)、long、float、double等基本數(shù)據(jù)類型,不同的是它是一種復(fù)雜的數(shù)據(jù)類型。
2、函數(shù):函數(shù)必須聲明后才可以被調(diào)用。調(diào)用格式為:函數(shù)名(實參)調(diào)用時函數(shù)名后的小括號中的實參必須和聲明函數(shù)時的函數(shù)括號中的形參個數(shù)相同。
參考資料來源:百度百科-函數(shù)
參考資料來源:百度百科-類
友元函數(shù)和類的成員函數(shù)都可以訪問類的私有成員變量或者是成員函數(shù),但是他們調(diào)用的形式不同。
類的成員函數(shù)是屬于類的,所以調(diào)用的時候是通過指針this調(diào)用的。
而類的友元函數(shù)不屬于類,當(dāng)然也不能有this指針了,也就是在友元函數(shù)中不能出現(xiàn)this指針。
同時友元函數(shù)是有關(guān)鍵字friend修飾。
再有的情況下,友元函數(shù)是很有用的。特別是在重載一些操作符的時候用處很明顯。
本文名稱:python中有友元函數(shù) 定義一個友元函數(shù)
路徑分享:http://chinadenli.net/article24/hijgje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、電子商務(wù)、營銷型網(wǎng)站建設(shè)、Google、動態(tài)網(wǎng)站、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)