gpt4 book ai didi

c++ - 一个类的成员函数作为另一个类的友元

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:10 25 4
gpt4 key购买 nike

在这段代码中,我已经使 B 类的最大函数成为 A 类的 friend 。我也做了 B 类的前向声明。但它给出了错误。

#include<iostream>

using namespace std;

class B;

class A
{
int a;
public:

void get()
{
cin>>a;
}

friend void B :: max(A , B);
};

class B
{
int b;
public:

void get()
{
cin>>b;
}

void max(A x, B y)
{
if (x.a > y.b)
cout<< " x is greater";
else cout<<"y is greater";
}
};

int main()
{
A x;
B y,c;
x.get();
y.get();
c.max(x,y);
}

最佳答案

B 在您将 B::max 声明为友元方法时不完整。因此,编译器不知道是否有这样的方法。

这意味着你需要

  1. 重新排序类,以便 A 知道 B 有一个方法 B::max
  2. 在类定义之外实现方法 B::max,当两个类都完成时,因为您访问了内部变量。

通过 const 引用传递参数也是一个好主意。使用 const 强调您没有修改它们。通过引用传递以避免不必要的复制。

所以,考虑到这一点:

class A;

class B{
int b;
public:
void get(){
cin>>b;
}
void max(const A& x, const B& y);
};

class A{
int a;
public:
void get(){
cin>>a;
}
friend void B :: max(const A& , const B&);
};

void B::max(const A& x, const B& y) {
if (x.a > y.b)
cout<< " x is greater";
else
cout<<"y is greater";
}

关于c++ - 一个类的成员函数作为另一个类的友元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32170650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com