c/c++ 友元基本概念
程序员文章站
2024-01-03 17:24:16
友元基本概念: 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); }