c/c++ 友元基本概念
阿新 • • 發佈:2018-08-20
test names 能夠 ons fun c++ std 訪問類 color
友元基本概念:
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); }
c/c++ 友元基本概念