一個類的友元函數能夠訪問
① 友元函數可以訪問類的私有數據
普通函數是可以將類對象作為參數的,也可以直接訪問public的成員函數和數據成員,但是不能訪問private和protected類型的成員函數和數據成員。
② c++ 選擇題,求答案
A. 析構函數有且只有一個 B.析構函數無任何函數類型
C.析構函數和構造函數一樣可以有形參 D.函數的作用是在對象被撤消時收回先前分配的內存空間
10. 下列的各類函數中,______c____不是類的成員函數
A. 構造函數 B. 析構函數 C. 友元函數 D. 拷貝初始化構造函數
11. 下述靜態數據成員函數的特徵中,____d_____是錯誤的
A.說明靜態書記成員時前邊要加修飾符static B.靜態數據成員在類體外要進行初始化
C.引用靜態數據成員時,要在靜態數據成員名前加〈類名〉和作用域運算符 D.靜態數據成員不是所有對象共用的
12.下列關於指針的運算中,___a_____是非法的
A.兩個指針在一定條件下,可以進行相等或不等的運算 B.可以將一個空指針賦給某個指針
C.一個指針可以加上兩個整數之差 D.兩個指針在一定條件下可以相加
13. 若定義:float x;int a,b; ,則正確的switch 語句是_____d_____
A.switch(x)
{ case 1.0:cout<<"*\n";
case 2.0:cout<< "**\n";
}
B. switch (x)
{ case 1.2:cout<<"*\n";
case 3 :cout<<"**\n";
}
C. switch (a+b)
{ case 1.0:cout<<"*\n";
case 1+2:cout<<"**\n";
}
D. switch (a+b)
{case 1:cout<<"*\n";
case 2:cout<<"**\n";
}
14. 下列程序輸出的結果是_________
#include <stdio.h>
sub1(char a, char b) {char c; c=a; b=c;}
sub2(char a, char b) {char c; c=*a; b=c;}
sub3(char a, char b) {char c; c=*a; *a=*b;*b=c;}
void main ( )
{ char a, b;
a='A';b='B';sub1 (a,b);putchar(a);putchar(b);
a='A';b='B';sub2 (&a,b);putchar(a);putchar(b);
a='A';b='B';sub3 (&a,&b);putchar(a);putchar(b);
putchar('\n');
}
A.ABABAB B.ABBBBA C.ABBABA D.ABABBA
15.一個類的友元函數能夠訪問該類的____d____
A. 私有成員 B.保護成員 C. 公有成員 D. 所有成員
16.下列運算符中,___a__運算符在C++中不能重載
A.?: B.+ C.- D.<=
③ C++中類的友元函數能不能訪問類的靜態數據成員
1、 友元函數是可以直接訪問類的私有成員的非成員函數。它是定義在類外的普通函數,它不屬於任何類,但需要在類的定義中加以聲明,聲明時只需在友元的名稱前加上關鍵字friend。
2、 友元函數可以訪問類的靜態成員、私有成員和公有成員。
3、友元的作用在於提高程序的運行效率(即減少了類型檢查和安全性檢查等都需要的時間開銷),但是,它破壞了類的封裝性和隱藏性,使得非成員函數可以訪問類的私有成員。
④ 友元函數可以訪問公有成員函數嗎
1、 友元函數是可以直接訪問類的私有成員的非成員函數。它是定義在類外的普通函數,它不屬於任何類,但需要在類的定義中加以聲明,聲明時只需在友元的名稱前加上關鍵字friend。 2、 友元函數可以訪問類的靜態成員、私有成員和公有成員。
⑤ 友元函數有什麼作用,它主要用在哪些情況下
友元函數的作用就是提供直接訪問對象的私有成員的介面。通過友元,一個不同函數或另一個類中的成員函數可以訪問類中的私有成員和保護成員。
使用情況:
1)必須在類的說明中說明友元函數,說明時以關鍵字friend開頭,後跟友元函數的函數原型,友元函數的說明可以出現在類的任何地方,包括在private和public部分;
2)注意友元函數不是類的成員函數,所以友元函數的實現和普通函數一樣,在實現時不用"::"指示屬於哪個類,只有成員函數才使用"::"作用域符號;
3)友元函數不能直接訪問類的成員,只能訪問對象成員;
4)友元函數可以訪問對象的私有成員,但普通函數不行;
5)調用友元函數時,在實際參數中需要指出要訪問的對象;
6)類與類之間的友元關系不能繼承;
7)一個類的成員函數也可以作為另一個類的友元,但必須先定義這個類。
(5)一個類的友元函數能夠訪問擴展閱讀:
友元函數的成員函數:
假設f是想正確聲明的函數,c是和它相關的類;
1、虛函數必須是成員函數。如果f必須是虛函數,就讓它成為c的成員函數。
2、operator>>;和operator<<;決不能是成員函數。如果f是operator>>;或operator<<;,讓f成為非成員函數。如果f還需要訪問c的非公有成員,讓f成為c的友元函數;
3、只有非成員函數對最左邊的參數進行類型轉換。如果f需要對最左邊的參數進行類型轉換,讓f成為非成員函數。如果f還需要訪問c的非公有成員,讓f成為c的友元函數;
4、其它情況下都聲明為成員函數;
5、如果以上情況都不是,讓f成為c的成員函數。
⑥ 友元函數是否能訪問當前類中對象成員的私有成員
可以訪問。。成員函數和友元函數具有同等的特權(100% 的)。主要的不同在於友元函數象f(x)這樣調用,而成員函數象 x.f()這樣調用。因此,可以在成員函數(x.f())和友元函數(f(x))之間選擇的能力允許設計者選擇他所認為更具可讀性的語法來降低維護成本...
⑦ 友元函數有什麼作用
友元函數是可以直接訪問類的私有成員的非成員函數。它是定義在類外的普通函數,它不屬於任何類,但需要在類的定義中加以聲明,聲明時只需在友元的名稱前加上關鍵字friend,其格式如下:
friend 類型 函數名(形式參數);
友元函數的聲明可以放在類的私有部分,也可以放在公有部分,它們是沒有區別的,都說明是該類的一個友元函數。一個函數可以是多個類的友元函數,只需要在各個類中分別聲明。友元函數的調用與一般函數的調用方式和原理一致。
拓展資料:
使用說明
1、友元函數是類外函數,聲明可以放在類的私有或者公有,且都沒有區別;
2、直接調用友元函數不需要通過對象或者指針;
3、友元函數沒有this指針,且不能被繼承;
4、友元函數聲明形式 friend + 普通函數聲明。
參考資料:友元函數
⑧ 友元的友元函數
友元函數是能夠訪問類中的私有成員的非成員函數。友元函數從語法上看,它與普通函數一樣,即在定義上和調用上與普通函數一樣。
友元關系不具對稱性。即 A 是 B 的友元,但 B 不一定是 A 的友元。 友元關系不具傳遞性。即 B 是 A 的友元,C 是 B 的友元,但是 C 不一定是 A 的友元。
作用及特點
友元提供了不同類的成員函數之間、類的成員函數與一般函數之間進行數據共享的機制。通過友元,一個不同函數或另一個類中的成員函數可以訪問類中的私有成員和保護成員。c++中的友元為封裝隱藏這堵不透明的牆開了一個小孔,外界可以通過這個小孔窺視內部的秘密。
友元的正確使用能提高程序的運行效率,但同時也破壞了類的封裝性和數據的隱藏性,導致程序可維護性變差。 下面舉一例子說明友元函數的應用。 #include<iostream>#include<cmath>usingnamespacestd;classPoint{public:Point(doublexx,doubleyy){x=xx;y=yy;};voidGetxy();frienddoubleDistance(Point&a,Point&b);private:doublex,y;};voidPoint::Getxy(){cout<<(<<x<<,<<y<<)<<endl;}doubleDistance(Point&a,Point&b){doubledx=a.x-b.x;doubledy=a.y-b.y;returnsqrt(dx*dx+dy*dy);}intmain(void){Pointp1(3.0,4.0),p2(6.0,8.0);p1.Getxy();p2.Getxy();doubled=Distance(p1,p2);cout<<Distanceis<<d<<endl;return0;}說明:在該程序中的Point類中說明了一個友元函數Distance(),它在說明時前邊加friend關鍵字,標識它不是成員函數,而是友元函數。它的定義方法與普通函數定義一樣,而不同於成員函數的定義,因為它不需要指出所屬的類。但是,它可以引用類中的私有成員,函數體中a.x,b.x,a.y,b.y都是類的私有成員,它們是通過對象引用的。在調用友元函數時,也是同普通函數的調用一樣,不要像成員函數那樣調用。本例中,p1.Getxy()和p2.Getxy()這是成員函數的調用,要用對象來表示。而Distance(p1, p2)是友元函數的調用,它直接調用,不需要對象表示,它的參數是對象。(該程序的功能是已知兩點坐標,求出兩點的距離。)
⑨ 一個類的友元函數可以訪問該類的() A私有成員 B保護成員C公有成員D所有成員
選擇D
成員函數跟友元函數有相同的許可權,都可以訪問公有、保護、私有的成員
⑩ 類的友元函數只能訪問類的私有成員嗎
只能被共有成員函數以及該類的任何友元類或友元函數訪問,肯定錯呀。
私有成員函數也能訪問呀。