c++友元类 如何使用,请你举一个代码实例说明
时间: 2024-10-17 16:06:09 浏览: 57
C++中的友元类是指一个类将另一个类声明为它的友元,这样这个友元类就可以访问原类的私有和保护成员。下面是一个简单的示例:
```cpp
#include <iostream>
class B; // 前向声明
class A {
private:
int x;
public:
A(int val) : x(val) {}
friend class B; // 声明B为A的友元类
};
class B {
public:
void setX(A& a, int val) {
a.x = val; // 可以访问A的私有成员x
}
};
int main() {
A a(10);
B b;
b.setX(a, 20);
std::cout << "A的x值为: " << a.x << std::endl; // 输出A的x值为: 20
return 0;
}
```
在这个例子中,类A有一个私有成员变量`x`,我们通过声明类B为A的友元类,使得类B的成员函数`setX`可以直接访问类A的私有成员`x`。在`main`函数中,我们创建了类A和类B的对象,并通过类B的成员函数`setX`修改了类A的私有成员`x`的值。
相关问题
c++友元函数
### C++ 中友元函数的概念
友元函数是 C++ 的一个重要特性,允许非成员函数访问类的私有(`private`)和保护(`protected`)成员[^1]。尽管友元函数不是类的一部分,它可以像类的成员函数一样直接访问类的内部数据。
#### 特点总结
- **非成员属性**:友元函数不属于任何特定对象实例,而是独立于类存在的全局函数或另一个类的成员函数。
- **访问权限**:能够访问被声明为 `friend` 类型的所有成员变量和方法,无论其访问控制符如何设置。
- **声明方式**:在类内使用 `friend` 关键字进行声明;实际定义则位于类外部。
- **作用范围**:虽然作为朋友关系存在于某个类中,但其实现并不局限于该类体内,可在程序任意位置完成定义[^3]。
### 使用场景分析
当设计者希望保持封装原则的同时提供一些额外的功能接口时,可能会考虑采用友元机制。例如,在不破坏现有 API 设计的前提下增加调试工具或是实现复杂的运算逻辑等情形下尤为适用。
具体来说:
- 实现输入/输出流操作重载;
- 提供辅助性的算法实现而不必将其纳入目标类本身;
- 方便不同类之间的协作工作,特别是在多态环境中共享资源管理职责等情况。
### 示例代码展示
下面给出一段简单的例子来说明友元函数的具体应用:
```cpp
#include <iostream>
using namespace std;
class Box {
double width;
public:
Box(double w) : width(w) {}
// 声明display()为Box类的友元函数
friend void display(Box box);
};
// 定义友元函数
void display(Box box){
cout << "Width of the box: " << box.width << endl;
}
int main(){
Box small(20.5);
// 调用友元函数显示宽度信息
display(small);
return 0;
}
```
此段代码展示了如何创建一个名为 `Box` 的简单类,并为其指定了一个名为 `display()` 的友元函数用于打印对象的状态信息。由于已经建立了友好关联,所以即使 `width` 是私有的也能顺利读取并输出到屏幕上[^2]。
阅读全文
相关推荐
















