c++ - 一个类的另一个类的 friend 的功能

标签 c++ object friend private-members

我有两个类 XY

Y有一个私有(private)成员markX有一个函数getmark()
我将 getmark() 声明为 Yfriend

现在,如何使用friend 函数访问Y 的私有(private)成员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 类)时,为了向 X::getmark()< 声明 Y 参数,需要对 Y 类进行前向声明.

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

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

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

关于c++ - 一个类的另一个类的 friend 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25589334/

相关文章:

c++ - 如何转换数组中的参数列表

c++ - 与 STL 和 std::basic_string 不同,为什么 std::function 没有默认分配器

c++ - 关于 C++ 中模板上重载运算符的一些编译器错误

c++ - Qt -"\n"不起作用,但 std::endl 可以吗?

c++ - 如何让数字停止使用 std::wfstream 库中的分组分隔符?

javascript - ES2015 : Call Inner method from overwrited class

java - java中如何查找对象的实例号

java - 我如何使用 foreach 循环来打印不同类的不同对象的Arraylist

c++ - 正确使用 friend 来使用多种策略而不丢失状态?

c++ - wxThread 文档示例有用还是不好的编码实践?