当一个类在其内部将其他类或者函数声明为友元(friend),这些友元就可以访问该类的私有成员和保护乘员,即使它们不是该类的成员。友元关系在C++中提供了一种特殊的访问权限,可以在需要时共享类的私有信息。
全局函数做友元
#include<iostream>
using namespace std;
class MyClass {
private:
int Data;
public:
MyClass(int data):Data(data){}
friend void friendFunc(MyClass obj); //声明友元函数
};
void friendFunc(const MyClass obj){
cout << obj.Data << endl;
}
int main(){
MyClass obj(10);
friendFunc(obj);
return 0;
}
类做友元
#include<iostream>
using namespace std;
class YourClass;//还没创建,提前声明
class MyClass {
friend class YourClass;//为MyClass类的友元类YourClass
private:
int Data;
public:
MyClass(int data):Data(data){}
};
class YourClass {
public:
void show(const MyClass obj){
cout << obj.Data << endl;
}
};
int main(){
MyClass obj(10);
YourClass obj2;
obj2.show(obj);
return 0;
}
成员函数做友元
#include <iostream>
using namespace std;
class MyClass; // 提前声明
class YourClass {
public:
void show(const MyClass obj); // 声明,并且到外面实现,否则会报错
//这是因为定义在内部实现时,被视为内联函数,编译器此时尚未看到完整类的定义
//因此无法访问私有成员,若移动到类外部实现,编译器可以看到完整类定义,则不会报错
};
class MyClass {
friend void YourClass::show(const MyClass obj);
private:
int Data;
public:
MyClass(int data) : Data(data) {}
};
void YourClass::show(const MyClass obj) {
cout << obj.Data << endl;
}
int main() {
MyClass obj(10);
YourClass obj2;
obj2.show(obj);
return 0;
}