卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

友元函數(shù)的聲明和定義 友元函數(shù)應(yīng)當(dāng)在類(lèi)的private中還是public中聲明?

友元函數(shù)應(yīng)當(dāng)在類(lèi)的private中還是public中聲明?首先,友元是一種定義在類(lèi)外部的普通函數(shù)或類(lèi),但它需要在類(lèi)體內(nèi)進(jìn)行說(shuō)明,為了與該類(lèi)的成員函數(shù)加以區(qū)別,在說(shuō)明時(shí)前面加以關(guān)鍵字friend。友元不

友元函數(shù)應(yīng)當(dāng)在類(lèi)的private中還是public中聲明?

首先,友元是一種定義在類(lèi)外部的普通函數(shù)或類(lèi),但它需要在類(lèi)體內(nèi)進(jìn)行說(shuō)明,為了與該類(lèi)的成員函數(shù)加以區(qū)別,在說(shuō)明時(shí)前面加以關(guān)鍵字friend。

友元不是成員函數(shù),但是它可以訪問(wèn)類(lèi)中的私有成員。所以,友元聲明只能出現(xiàn)在類(lèi)定義中。因?yàn)橛言皇鞘跈?quán)類(lèi)的成員,所以它不受其所在類(lèi)的聲明區(qū)域public private 和protected 的影響。

構(gòu)造函數(shù)聲明成友元時(shí),不能同時(shí)定義嗎?

friend double REALSET::REALSET(INTSET &s)//自動(dòng)成為inline函數(shù)

{

...

}

這段代碼不對(duì),有兩個(gè)問(wèn)題。首先,你不能在INTSET類(lèi)中定義REALSET的成員函數(shù),注意是不能定義,不是不能聲明; 其次構(gòu)造函數(shù)不能有返回值,把那個(gè)double去掉。

更改成這樣:

class INTSET{

...

friend REALSET::REALSET(INTSET &s) //只保留聲明

...

}//end of class INTSET

//REALSET構(gòu)造函數(shù)移植INTSET之后。

//注意在此函數(shù)中使用了INTSET類(lèi)的成員,所以必須定義在INTSET類(lèi)之后。

REALSET::REALSET(INTSET &s)

{

...

}

友元函數(shù)為什么不直接定義為類(lèi)的成員函數(shù)呢,他倆感覺(jué)沒(méi)什么區(qū)別呀?

那就不要用友元函數(shù)。本來(lái)就有人認(rèn)為完全不該用友元函數(shù)




使用運(yùn)算符重載,有的時(shí)候不適合直接聲明為成員函數(shù)。


class point {

private:

int x

int y

public:

point(int x,int y)

}


std::ostream& operator<<(std::ostream& os, const point& p)

//重載流輸出運(yùn)算符,運(yùn)算符的左操作數(shù)必須是 std::ostream& 類(lèi)型,不能直接聲明為成員函數(shù)

//流輸出函數(shù)必須訪問(wèn)point類(lèi)的數(shù)據(jù)成員(包括private數(shù)據(jù)成員)

//典型實(shí)現(xiàn)是 return os << p.x << " " << p.y

不過(guò)這也有別的解決方法,不是把 operator<< 聲明為友元函數(shù),而是使用一個(gè)成員函數(shù)(類(lèi)似于訪問(wèn)者模式)


class point {

private:

int x

int y

public:

point(int x,int y)

std::ostream& print_by(std::ostream& os)//成員函數(shù)print_by定義實(shí)際的輸出方式

}


//重載流輸出運(yùn)算符,運(yùn)算符的左操作數(shù)必須是 std::ostream& 類(lèi)型,不能直接聲明為成員函數(shù)

//不需要作為友元函數(shù)

std::ostream& operator<<(std::ostream& os, const point& p){

return p.print_by(os) //調(diào)用成員函數(shù) print_by

}

C 如何將一個(gè)類(lèi)的成員函數(shù)申明為另一個(gè)類(lèi)的友元函數(shù)?

可以在類(lèi)A中把類(lèi)B的一個(gè)成員函數(shù)聲明為自己的友元函數(shù)。 class A { void F() } #include "A.h" class B { friend void A::F() }

友元函數(shù)是否能訪問(wèn)當(dāng)前類(lèi)中對(duì)象成員的私有成員?

1、友元函數(shù)是可以直接訪問(wèn)類(lèi)的私有成員的非成員函數(shù)。它是定義在類(lèi)外的普通函數(shù),它不屬于任何類(lèi),但需要在類(lèi)的定義中加以聲明,聲明時(shí)只需在友元的名稱(chēng)前加上關(guān)鍵字friend。

2、友元函數(shù)可以訪問(wèn)類(lèi)的靜態(tài)成員、私有成員和公有成員。

3、友元的作用在于提高程序的運(yùn)行效率(即減少了類(lèi)型檢查和安全性檢查等都需要的時(shí)間開(kāi)銷(xiāo)),但是,它破壞了類(lèi)的封裝性和隱藏性,使得非成員函數(shù)可以訪問(wèn)類(lèi)的私有成員。