C++全局函数和友元函数的区别是什么?
时间: 2024-04-27 09:08:09 浏览: 164
C++中的全局函数和友元函数都是定义在类外部的函数,但是它们有以下区别:
1. 访问权限:全局函数不能直接访问类的私有成员,而友元函数可以访问类的私有成员。
2. 关联对象:全局函数不与任何类对象相关联,而友元函数与其关联的类对象相关联。
3. 声明:全局函数不需要在类中进行声明,而友元函数需要在类中进行声明。
4. 定义位置:全局函数的定义位置和其他普通函数一样,可以定义在类的前面或后面,而友元函数的定义位置必须在类的外部,且必须在类声明之后。
总之,友元函数是一种特殊的全局函数,它可以访问类的私有成员,并且与类对象相关联。全局函数不能访问类的私有成员,也不与类对象相关联,因此在使用时需要注意这些区别。
相关问题
友元的三种实现全局函数做友元类做友元成员函数做友元
友元在C++中是一种特殊的访问权限控制机制,它允许特定非成员函数或类访问私有和保护成员,即使它们通常对外部不可见。以下是三种常见的友元实现方式:
1. **全局函数作为友元**:全局函数可以直接访问任何类的私有或保护成员,只要该函数被声明为那个类的友元。例如:
```cpp
void printStudentInfo(Student& s); // 全局函数声明为Student的友元
```
2. **类作为友元**:当另一个类想要访问某类的私有成员时,可以将这个类声明为目标类的友元。例如:
```cpp
class PrintUtil; // 定义一个类,PrintUtil是Student的友元
class Student {
friend class PrintUtil;
// ...
};
```
3. **友元成员函数**:这是友元最直接的应用,成员函数可以访问类的私有和保护成员。例如:
```cpp
class MyClass {
friend void myFriendFunction(MyClass& obj);
// ...
};
void myFriendFunction(MyClass& obj) {
obj.myPrivateData; // 直接访问
}
```
友元的关键字为 friend友元的三种实现全局函数做友元类做友元成员函数做友元
在C++中,`friend`关键字用于创建友谊,即让一个类能够访问另一个类的私有或保护成员,而通常,类之间是无法直接访问对方的私有部分的。以下是三种常见的友元实现方式:
1. **全局函数作为友元**:全局函数可以直接访问任何类的私有和保护成员,只要这个函数被声明为该类的友元。例如:
```cpp
class MyClass;
extern void printMyClass(MyClass& obj); // 全局函数printMyClass被声明为MyClass的友元
```
2. **类做友元**:一个类可以指定其他类为其友元,允许被友元类的对象访问其私有和保护成员。如:
```cpp
class A {
friend class B; // B类被声明为A类的友元
private:
int a;
};
```
3. **成员函数做友元**:类的某个成员函数可以被声明为友元,使得它能访问该类的私有和保护成员。比如:
```cpp
class C {
friend void myFriendFunction(C& c); // 函数myFriendFunction被声明为C类的友元成员
private:
int cValue;
};
void myFriendFunction(C& c) {
// 这里可以直接访问c的私有成员cValue
}
```
阅读全文