friend 友元类和友元函数 friend 友元类和友元函数
时间: 2024-06-08 16:05:05 浏览: 129
友元类是指在一个类中,可以通过友元关键字将另一个类声明为友元类。友元类的所有成员函数都能够访问被声明为友元类的类的私有和保护成员。这意味着友元类能够绕过类的访问限定符,直接访问私有和保护成员变量和函数。
友元函数是指在一个类中,可以通过友元关键字将一个函数声明为友元函数。这个友元函数可以访问该类的私有和保护成员,但不是类的成员函数。与友元类类似,友元函数也能够绕过类的访问限定符,直接访问私有和保护成员。
友元函数和友元类的使用方式都是通过在类中使用friend关键字进行声明。友元函数可以在类的任何地方进行声明,并且一个函数可以是多个类的友元函数。另外,友元函数不能用const修饰。
相关问题
友元的关键字为 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
}
```
友元函数类外需要声明吗_C++的友元函数和友元类
是的,C++中的友元函数如果在类外定义,需要在类中进行声明。声明的方式是在类的定义中使用关键字`friend`,并将函数原型放在类的内部。这样,在类外定义友元函数时,编译器就可以识别它是一个友元函数并允许其访问类的私有成员。
例如,假设有一个类`MyClass`和一个友元函数`friendFunc`,其原型为`void friendFunc(MyClass obj)`,则在类中的声明方式如下:
```c++
class MyClass {
friend void friendFunc(MyClass obj);
//...
};
```
在类外定义时,不需要再加上`friend`关键字,但需要在前面加上类名和作用域解析符`::`,例如:
```c++
void ::friendFunc(MyClass obj) {
//...
}
```
至于友元类的声明方式也类似,需要在类的定义中使用`friend`关键字声明友元类,并将友元类的名称放在其中。
阅读全文