我有两个类XY

Y具有私有成员markX具有功能getmark()
我将getmark()声明为friendY

现在,如何使用mark函数访问Y的私有成员friend

这是我到目前为止的代码

#include<iostream>

using namespace std;

class X
{
    public:
    int getmark();
};

class Y
{
    int mark;
    public:
    friend int X::getmark();
};

int main()
{

}

最佳答案

#include<iostream>

using namespace std;

class Y; //forward declaration of class Y
class X
{
    public:
    int getmark(Y);
};

class Y
{
    int mark;
    public:
    friend int X::getmark(Y);
};

int X::getmark(Y obj){
    cin>>obj.mark;
}

int main()
{
  X a;
  Y b;
  a.getmark(b);
}


首先,在创建对象a(类X)时,必须有类Y的前向声明才能将Y参数声明为X::getmark()

创建对象b(类Y)将不会有问题,因为编译器知道类X存在(对于friend函数)。

然后,只需通过对象getmark()调用函数a

注意:必须在类Y的声明之后声明函数getmark(),否则编译器会将类Y视为不完整的类型。

07-28 07:25