c++ 如何写一个友元类
时间: 2023-06-06 08:04:53 浏览: 54
友元类是指能够访问另一个类的私有成员的类,下面是一个示例:
```
class A {
private:
int a;
public:
friend class B; // B是A的友元类
};
class B {
public:
void func(A obj) {
obj.a = 10; // 可以访问A的私有成员a
}
};
```
在这个示例中,类A声明了类B为它的友元类。在类B的成员函数中,可以访问A的私有成员a。通过这种方式,我们可以在某些情况下访问其他类的私有成员,例如在类的测试中或实现一些特定行为。
相关问题
c++ 如何写一个友元
友元函数必须在类定义中声明,但是它们不是成员函数。友元函数不能直接访问类中的私有或保护的成员,因此需要将其声明为友元函数以便可以访问类中的私有或保护的成员。以下是编写友元函数的步骤:
1. 在类定义内部声明友元函数。
2. 在类定义外部定义友元函数。
3. 在友元函数中访问类中的私有或保护的成员。
下面是一个示例:
```
#include <iostream>
using namespace std;
class XYZ {
private:
int num;
public:
XYZ() {
num = 0;
}
friend void display(XYZ obj);
};
void display(XYZ obj) {
cout << "num is: " << obj.num << endl;
}
int main() {
XYZ obj;
display(obj);
return 0;
}
```
在上面的示例中,我们定义了一个名为 XYZ 的类并声明了一个名为 display 的友元函数。在函数中,我们可以访问 XYZ 类中的私有成员 num。在主函数中,我们创建了一个 XYZ 对象,并将其传递给 display 函数,该函数将对象的 num 成员打印到屏幕上。
c++友元类构造
在 C++ 中,友元类可以访问它的友元类的私有成员和保护成员。如果你想让一个类成为另一个类的友元类,需要在另一个类的定义中声明它为友元类,并在该类的声明中定义它的成员函数。下面是一个简单的例子:
```
class MyClass2;
class MyClass1 {
friend class MyClass2;
private:
int x;
};
class MyClass2 {
public:
void setX(MyClass1 &obj, int val) {
obj.x = val;
}
};
int main() {
MyClass1 obj1;
MyClass2 obj2;
obj2.setX(obj1, 10);
return 0;
}
```
在这个例子中,MyClass1 声明 MyClass2 为友元类,因此 MyClass2 可以访问 MyClass1 的私有成员 x。在 MyClass2 中定义了一个 setX 函数,它将 MyClass1 的 x 成员设置为指定的值。在 main 函数中,我们创建了 MyClass1 和 MyClass2 的实例,并将 MyClass1 的 x 成员设置为 10。
需要注意的是,友元关系是单向的,如果你将 MyClass1 声明为 MyClass2 的友元类,MyClass2 不能自动访问 MyClass1 的私有成员和保护成员。