制作成员函数,一个class的朋友
Making member function, friend of a class
我一直在尝试编写代码来实现一个成员函数,该函数可以通过将 class 声明为 class 中的好友来访问其私有数据。但是我的代码失败了,我似乎无法弄清楚它有什么问题:
#include <iostream>
using namespace std;
class A;
class B
{
private:
int b; // This is to be accessed by member function of A
public:
friend void A::accessB();
};
class A
{
private:
int a;
public:
void accessB();
};
void A::accessB()
{
B y;
y.b = 100;
cout << "Done" << endl;
}
int main(void)
{
A x;
x.accessB();
}
我正在尝试使用 getAccessB 函数访问 B 的私有内容,该函数是 A 的成员函数。我已将其声明为好友。这有什么问题吗?
A::accessB
在friend
声明的地方没有声明,所以不能引用。您可以通过改变定义和声明的顺序来解决此问题,使 A::accessB
对 B
:
可见
class A
{
private:
int a;
public:
void accessB();
};
class B
{
private:
int b;
public:
friend void A::accessB();
};
void A::accessB()
{
B y;
y.b = 100;
cout << "Done" << endl;
}
请注意,将函数设为 friend
只是为了修改您的私有状态是一种不好的代码味道。希望您这样做只是为了理解这些概念。
排序。如果您指的是 A::accessB
,则必须在该点声明 A
。将 A
class 放在 B
上方,它将正常工作。
我一直在尝试编写代码来实现一个成员函数,该函数可以通过将 class 声明为 class 中的好友来访问其私有数据。但是我的代码失败了,我似乎无法弄清楚它有什么问题:
#include <iostream>
using namespace std;
class A;
class B
{
private:
int b; // This is to be accessed by member function of A
public:
friend void A::accessB();
};
class A
{
private:
int a;
public:
void accessB();
};
void A::accessB()
{
B y;
y.b = 100;
cout << "Done" << endl;
}
int main(void)
{
A x;
x.accessB();
}
我正在尝试使用 getAccessB 函数访问 B 的私有内容,该函数是 A 的成员函数。我已将其声明为好友。这有什么问题吗?
A::accessB
在friend
声明的地方没有声明,所以不能引用。您可以通过改变定义和声明的顺序来解决此问题,使 A::accessB
对 B
:
class A
{
private:
int a;
public:
void accessB();
};
class B
{
private:
int b;
public:
friend void A::accessB();
};
void A::accessB()
{
B y;
y.b = 100;
cout << "Done" << endl;
}
请注意,将函数设为 friend
只是为了修改您的私有状态是一种不好的代码味道。希望您这样做只是为了理解这些概念。
排序。如果您指的是 A::accessB
,则必须在该点声明 A
。将 A
class 放在 B
上方,它将正常工作。