C++的friend class和class有啥区别
时间: 2024-09-09 08:15:50 浏览: 62
C++中的`friend`关键字有两个主要用途,一个是`friend`函数,另一个就是`friend class`。两者的主要区别在于它们的作用范围和访问权限:
1. **friend 函数**[^1]:
- 它允许非成员函数直接访问类的私有(private)和保护(protected)成员。
- 这意味着你可以在类外部定义一个函数,这个函数可以操作类的对象,即使它不是类的一部分。
- 示例:
```cpp
class MyClass {
private:
int secret;
};
// 非成员函数成为MyClass的朋友
void showSecret(MyClass& obj) friend {
cout << "The secret is: " << obj.secret << endl;
}
```
2. **friend class**[^2]:
- `friend class`用于指定另一个类可以直接访问本类的私有和保护成员,就像它是本类的一个内部成员一样。
- 类与类之间的这种关系被称为“友元关系”,通常用于实现一些特定的设计模式或优化。
- 示例:
```cpp
class FriendClass {
friend class MyClass;
};
class MyClass {
private:
int another_secret;
};
// MyClass现在可以直接访问FriendClass的对象
void accessFriend(FriendClass fc, MyClass& mc) {
mc.another_secret = fc.some_private_variable;
}
```
总结来说,`friend`函数主要用于提供外部函数对类内私有成员的访问,而`friend class`则用来让一个类能访问另一个类的私有成员,增强了两个类之间更紧密的耦合。
阅读全文