[英]Function of one class friend of another class
我有兩個班X
和Y
Y
具有私有成員mark
, X
具有函數getmark()
。
我宣布getmark()
為Y
的friend
。
現在,如何使用friend
功能訪問Y
的私有成員mark
?
這是我到目前為止的代碼
#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存在(對於Friendly函數)。
然后,只需通過對象a
調用函數getmark()
。
注意:必須在類Y的聲明之后聲明函數getmark()
,否則編譯器會將類Y視為不完整的類型。
只是一個可以設置標記的功能:
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
。
確保X::getmark()
的實現在class Y
的定義之后。 否則, X::getmark()
不會成為class Y
的朋友。
在X::getmark()
訪問Y
的私有成員。
碼:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.