如何访问友元类的成员
时间: 2023-08-08 17:09:32 浏览: 69
如果一个类被声明为另一个类的友元类,那么它的成员函数就可以通过友元类对象来访问该类的私有和保护成员。以下是一个示例代码:
```c++
class A {
private:
int a;
protected:
int b;
public:
int c;
friend class B; // B 是 A 的友元类
};
class B {
public:
void foo(A& obj) {
obj.a = 1; // 可以访问 A 的私有成员 a
obj.b = 2; // 可以访问 A 的保护成员 b
obj.c = 3; // 可以访问 A 的公有成员 c
}
};
int main() {
A obj;
B b;
b.foo(obj);
return 0;
}
```
在上面的例子中,类 `B` 被声明为类 `A` 的友元类,因此 `B` 的成员函数 `foo()` 可以访问 `A` 的私有成员 `a` 和保护成员 `b` 以及公有成员 `c`。在 `main()` 函数中,我们创建了一个 `A` 类型的对象 `obj`,然后创建了一个 `B` 类型的对象 `b`,并调用了 `b` 的成员函数 `foo()`,在 `foo()` 函数中通过对象 `obj` 来访问了 `A` 的成员变量。
相关问题
友元类可以访问私有成员吗
是的,友元类可以访问类的私有成员。如果一个类被声明为另一个类的友元类,那么这个友元类就可以访问被它所关联的类的所有成员,包括私有成员。友元类的声明方式为在被关联类的声明中添加一个 `friend` 关键字和友元类的名称。需要注意的是,友元关系不能被继承,如果一个类是另一个类的友元类,它的派生类并不自动成为被关联类的友元类。
友元类怎么访问私有变量
如果一个类被声明为另一个类的友元类,那么这个友元类就可以访问被它所关联的类的所有成员,包括私有成员。友元类可以通过对象名或指向对象的指针来访问被它所关联的类的私有变量。例如:
```c++
class A {
private:
int a;
friend class B;
};
class B {
public:
void func(A obj) {
int x = obj.a; // 通过对象名访问私有变量
int y = obj_ptr->a; // 通过指向对象的指针访问私有变量
}
private:
A* obj_ptr;
};
```
在上面的代码中,类 `A` 声明了类 `B` 为其友元类,因此类 `B` 可以访问类 `A` 的私有成员 `a`。在 `B` 类的 `func` 函数中,可以通过对象名或指向对象的指针来访问 `A` 类的私有成员 `a`。