我有两个课程X
和Y
。
Y
有一位私人会员mark
,X
有一个功能getmark()
。
我将getmark()
声明为friend
的{{1}}。
现在,如何使用Y
功能访问mark
的私人成员Y
?
这是我到目前为止的代码
friend
答案 0 :(得分:1)
#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
参数声明为X::getmark()
,必须使用类Y的前向声明。
创建对象b(类Y)不会成为问题,因为编译器知道存在类X(对于友元函数)。
然后,只需通过对象getmark()
调用函数a
。
注意:必须在声明类Y之后声明函数getmark()
,否则编译器会将类Y视为不完整类型。
答案 1 :(得分:0)
只是一个能够设置标记的功能:
void Y::setMark(int n)
{
mark = n;
}
确保将函数原型添加到Y类。
int X::getMark(Y &y)
{
return y.mark;
}
int main
{
X x;
Y y;
y.setMark(5);
cout << x.getMark(y) << endl;
}
应该输出5
。
答案 2 :(得分:0)
确保X::getmark()
的实施位于class Y
的定义之后。否则,X::getmark()
无法成为class Y
的朋友。
在Y
中随意访问X::getmark()
的私人成员。
代码:
class X
{
public:
int getmark();
};
class Y
{
int mark;
public:
friend int X::getmark();
};
int X::getmark()
{
Y y;
y.mark = 100;
// Do whatever you need to do with y.
return 0;
}