我是说假如类A为类B的友元类,如果B类中的成员函数想访问A类中的私有成员应该怎么做
时间: 2024-04-16 21:28:21 浏览: 21
如果类A为类B的友元类,那么类B中的成员函数可以访问类A中的私有成员。要实这一点,需要在类B中声明类A为友元类。这样,类B中的成员函数就可以直接访问类A中的私有成员。
下面是一个示例代码:
```cpp
class A {
private:
int privateMemberA;
public:
friend class B;
};
class B {
public:
void accessPrivateMemberA(A& obj) {
obj.privateMemberA = 10; // 访问类A中的私有成员
}
};
```
在上面的代码中,类A将类B声明为友元类。然后,在类B的成员函数`accessPrivateMemberA`中,我们可以直接访问类A中的私有成员`privateMemberA`。这样,类B的成员函数就可以使用类A的私有成员。
相关问题
假设类A为类B的友元类,那么类A中的成员函数可以访问类B中的私有成员吗
是的,如果类A被声明为类B的友元类,那么类A中的成员函数可以访问类B中的私有成员。友元类的概念允许一个类的成员函数访问另一个类中的私有成员,即使这些成员对外部是不可访问的。通过将类A声明为类B的友元类,类A中的成员函数就可以直接访问类B中的私有成员。这种访问权限的扩展可以提供更灵活的设计选择,但也需要谨慎使用,以避免破坏封装性和增加代码的复杂性。
创建类A和类B分别拥有私有成员,通过一个友元函数让他们实现相加
下面是一个简单的示例代码:
```c++
#include <iostream>
using namespace std;
class B; // 提前声明类B
class A {
private:
int numA;
public:
A(int n = 0) : numA(n) { }
friend int add(A a, B b); // 友元函数声明
};
class B {
private:
int numB;
public:
B(int n = 0) : numB(n) { }
friend int add(A a, B b); // 友元函数声明
};
int add(A a, B b) { // 友元函数定义
return a.numA + b.numB;
}
int main() {
A objA(10);
B objB(20);
cout << "相加结果为:" << add(objA, objB) << endl;
return 0;
}
```
在上面的代码中,类A和类B分别拥有私有成员numA和numB。为了让它们实现相加,我们定义了一个友元函数add,并在类A和类B中分别声明了该函数为友元函数。在友元函数中,我们可以访问类A和类B的私有成员,从而实现相加的功能。最后,在main函数中,我们创建了一个类A对象和一个类B对象,然后调用了add函数,输出了相加结果。