友元函数c++内部类

friend function c++ inside class

本文关键字:内部类 c++ 函数 友元      更新时间:2023-10-16

我写了这段代码,但是朋友函数不工作(foodmoney和hobbymoney没有在我的朋友函数中声明)。我的错误在哪里?

#include <iostream>
using namespace std;
class myBase
{
private:
    int friendvar;
    int foodmoney;
    int hobbymoney;
public:
    void setdata();
    myBase(){friendvar=0;}
    friend void caldata(myBase &mbo);
};
void myBase::setdata()
{
    cout<<"Enter foodmoney :" ;cin>>foodmoney;
    cout<<"enter hoobymoney:";cin>>hobbymoney;
}
void caldata(myBase &mbo)
{
    mbo.friendvar=(foodmoney+hobbymoney)/2;
    cout<<mbo.friendvar<<endl;
}
int main()
{
    myBase baseobj;
    baseobj.setdata();
    myBase friends;
    caldata(friends);
    return 0;
}
mbo.friendvar=(foodmoney+hobbymoney);

应为

mbo.friendvar=(mbo.foodmoney+mbo.hobbymoney);

等。等。

友元函数是而不是成员函数,因此它们没有对任何特定对象的特殊访问权限。您必须指定您希望访问的对象(在您的示例中使用mbo)。

话虽如此,我看不出caldata为什么是友元函数。为什么不让它成为一个常规的成员函数呢?或者你应该让它成为一个带两个参数的友元函数?很难说你想达到什么目的。

change

 cin>>foodmoney;

cin>>mbo.foodmoney;

和改变

cin>>hobbymoney;

cin>>mbo.hobbymoney;

您的代码根本无法编译。Fix已经描述过了。但是为了使它完整:当您使用mbo.friendvar引用friendvar时,请对foodmoneyhobbymoney做同样的操作。

也没有在构造函数中初始化foodmoneyhobbymoney。在你对caldata(friends);的调用中,你因此得到随机结果打印在屏幕上。最后:你用myBase friends;实例化了一个新对象,所以这是一个完全新的对象,不受之前调用setdata()的影响。

你对这个功能的低级要求在你的问题中没有定义,我不能帮助更多。