友元函數無法訪問
① 為什麼友元函數無法訪問類中的private成員
有類函數變數的等級決定,
public:為公開的成員和函數,誰都可以訪問。
private:為私有的成員和函數,僅對象本身可以訪問。
② c++友元函數不能訪問私有成員是為什麼
因為同樣的代碼在visual studio2008里能正常編譯,但放到VC6.0里卻提示不能訪問類complex的私有數據成員。根據C++的標准特性,類的友元函數應該允許訪問類的私有數據。
當在VC6.0里重載<<和>>時就會出現這種問題,奇怪的是重載別的運算符(如++)時,同樣訪問了類的私有數據成員,卻沒有報錯。
③ 一個函數定義為倆個類的友元函數為什麼該函數無法訪問這兩個類中的數據
using namespace std;//這句去掉
#include<iostream>改成#include<iostream.h>
這是VC6的BUG
④ 友元函數無法訪問靜態私有類成員
友元函數可以訪問私有成員
可以看下以下代碼:
class Test{
public:
friend void show(const Test& t){
cout << Test::num << endl;
}
private:
const static int num=10;
};
int main(int argc, char** argv) {
Test t;
show(t);
return 0;
}
我用的是dev-c++編譯工具,以上代碼可以通過編譯,程序能正常運行
你是不是用C++ primer plus (第六版)?
⑤ VS2013下友元函數不能訪問類的私有成員
這不是友元函數不能訪問私有成員,這是類對象不能訪問私有成員。
⑥ C++友元函數問題,類的成員函數無法訪問私有成員
改成下面的代碼 就能執行了。。vc6編譯通過。。
#include<iostream>
usingnamespacestd;
classX;//這里要前導聲明
classY
{
public:
boolifelse(X&temp);
};
classX
{
public:
friendboolY::ifelse(X&);
private:
inta;
intb;
};
boolY::ifelse(X&temp)
{
returntemp.a>temp.b?true:false;
}
intmain()
{
Xx;
Yy;
if(y.ifelse(x))cout<<"itistrue"<<endl;
elsecout<<"itisfalse!"<<endl;
return0;
}
⑦ c++中,為什麼友元函數訪問不了private成員
A,B類的定義順序需要交換一下,另外,A類中的
friend void display(A &t);
需要改為
friend void B::display(A &t);
整個代碼改正這樣試試:
#include<iostream>
using namespace std;
class A;
class B
{
private:
int a;
int b;
public:
B();
void display(A &t);
};
class A
{
private:
int a;
int b;
public:
friend void B::display(A &t);
A()
{
a = 5;
b = 8;
}
};
B::B()
{
a = 1;
b = 2;
}
void B::display(A &t)
{
cout << t.a << endl << t.b << endl;
cout << a << endl << b << endl;
}
int main()
{
class A a1;
class B b1;
b1.display(a1);
system("PAUSE");
return 0;
}