另一个班级的一个班级朋友的功能

时间:2014-08-31 05:55:46

标签: c++ object friend private-members

我有两个课程XY

Y有一位私人会员markX有一个功能getmark()
我将getmark()声明为friend的{​​{1}}。

现在,如何使用Y功能访问mark的私人成员Y

这是我到目前为止的代码

friend

3 个答案:

答案 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)

  1. 确保X::getmark()的实施位于class Y的定义之后。否则,X::getmark()无法成为class Y的朋友。

  2. Y中随意访问X::getmark()的私人成员。

  3. 代码:

    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;
    }