友元基本概念: 1,把一個一般函數聲明為一個類的友元函數 2,把一個類A的某幾個成員函數聲明為某個類B的友元函數 3,把一個類A聲明為一個類B的友元類。 友元的作用:可以訪問類B里所有的成員變數和成員方法,不管是public,protected,還是private。 1,把一個一般函數show聲明為 ...
友元基本概念:
1,把一個一般函數聲明為一個類的友元函數
2,把一個類A的某幾個成員函數聲明為某個類B的友元函數
3,把一個類A聲明為一個類B的友元類。
友元的作用:可以訪問類B里所有的成員變數和成員方法,不管是public,protected,還是private。
1,把一個一般函數show聲明為一個類的友元函數
#include <iostream>
using namespace std;
class Test{
friend void show(const Test &t);
public:
Test(int d = 0) : data(d){}
private:
void fun()const{
cout << "fun:" << data << endl;
}
int data;
};
//友元,即可以訪問私有成員變數,也可以訪問私有方法
void show(const Test &t){
cout << "friend of Test:" << t.data << endl;
t.fun();
}
int main(){
Test t(100);
show(t);
return 0;
}
2,把一個類A的fun成員函數聲明為類Test的友元函數,但是類A的fun1函數不是類Test的友元函數,所以在fun1里不能夠訪問Test的私有成員。
#include <iostream>
using namespace std;
class Test;
class A{
public:
A(int d = 0) : data(d){}
void fun(const Test &t);
void fun1(const Test &t);
private:
int data;
};
class Test{
friend void A::fun(const Test &t);
public:
Test(int d = 10) : data(d){}
private:
int data;
};
void A::fun(const Test &t){
cout << t.data << endl;
}
void A::fun1(const Test &t){
//編譯不能通過,因為fun1不是class Test的友元函數。
//cout << t.data <<endl;
}
int main(){
Test t(100);
A a;
a.fun(t);
}
3,把類B聲明為一個類Test的友元類,因此,類B的所有public成員函數都是類Test的友元函數。
#include <iostream>
using namespace std;
class Test;
class B{
public:
void fun1(const Test &t);
void fun2(const Test &t);
};
class Test{
friend class B;
public:
Test(int d = 0) : data(d){}
private:
void pri()const{
cout << "pri" << endl;
}
int data;
};
void B::fun1(const Test &t){
cout << t.data << endl;
}
void B::fun2(const Test &t){
t.pri();
}
int main(){
Test t(10);
B b;
b.fun1(t);
b.fun2(t);
}