簡體   English   中英

一班朋友的功能

[英]Function of one class friend of another class

我有兩個班XY

Y具有私有成員markX具有函數getmark()
我宣布getmark()Yfriend

現在,如何使用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

  1. 確保X::getmark()的實現在class Y的定義之后。 否則, X::getmark()不會成為class Y的朋友。

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM