友元基本概念:
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);
} 继续阅读与本文标签相同的文章
上一篇 :
对话行癫:解密阿里云顶层设计和底层逻辑
下一篇 :
不写一行代码,完成机器视觉算法的研发
-
【阿里云新品发布·周刊】第27期:函数计算2.0重磅发布!直击函数计算核心价值
2026-05-18栏目: 教程
-
2019 DevOps 必备面试题——容器化和虚拟化
2026-05-18栏目: 教程
-
从零开始入门 K8s| K8s 的应用编排与管理 | 9月23号栖夜读
2026-05-18栏目: 教程
-
实习生4面美团Java岗,已拿offer!(框架+多线程+集合+JVM)
2026-05-18栏目: 教程
-
Flutter浪潮下的音视频研发探索
2026-05-18栏目: 教程
