C++ friend
时间: 2025-08-28 15:34:15 AIGC 浏览: 10
### C++ 中 `friend` 关键字的用法
在 C++ 中,`friend` 关键字用于授予特定函数或类访问另一个类的私有成员和保护成员的权利。这使得某些外部实体能够绕过封装机制,直接操作对象内部的数据。
#### 类型一:友元函数
当声明一个全局函数作为某个类的友元时,该函数可以访问这个类的所有成员变量和成员方法:
```cpp
class MyClass {
private:
int value;
public:
MyClass(int v) : value(v) {}
friend void showValue(const MyClass &obj);
};
void showValue(const MyClass &obj) {
std::cout << "The value is: " << obj.value << std::endl; // 可以访问 private 成员
}
```
#### 类型二:友元类
如果希望整个类都能够成为另一类的朋友,则可以在被访问者中定义友元关系:
```cpp
class Container;
class Element {
protected:
double data;
public:
Element(double d):data(d){}
friend class Container; // 容器类是元素类的好朋友
};
class Container {
public:
static void PrintElementData(Element& e){
cout<<e.data<<"\n"; // 访问 protected 数据成员
}
};
```
#### 类型三:成员函数作为友元
允许其他类中的指定成员函数来充当当前类的对象的操作接口:
```cpp
class A {
private:
int secretNumber;
public:
explicit A(int n) : secretNumber(n){}
friend bool compareSecretNumbers(A a, B b);
};
class B {
private:
int hiddenNum;
public:
explicit B(int num) : hiddenNum(num) {}
friend bool compareSecretNumbers(A a, B b);
};
bool compareSecretNumbers(A a, B b) {
return (a.secretNumber == b.hiddenNum);
}
```
使用前缀形式 (`++i`) 的增量运算符对于迭代器和其他模板对象更为合适[^1];然而,在讨论 `friend` 关键字的应用场景下,此建议并不直接影响其功能实现方式。
阅读全文
相关推荐


















