朋友函数c ++里面的类

时间:2013-03-24 07:17:29

标签: c++ class friend-class

我写了这段代码,但朋友的功能不起作用(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;
}

3 个答案:

答案 0 :(得分:3)

mbo.friendvar=(foodmoney+hobbymoney);

应该是

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

等。等

朋友功能成员函数,因此他们无权访问任何特定对象。您必须指定要访问的对象(在您的情况下使用mbo)。

话虽如此,我看不出任何有理由为什么caldata是朋友的功能。为什么不把它变成普通的会员功能呢?或者也许你应该把它变成一个有两个参数的朋友函数?很难说你想在这里实现什么。

答案 1 :(得分:1)

更改

 cin>>foodmoney;

cin>>mbo.foodmoney;

并更改

cin>>hobbymoney;

cin>>mbo.hobbymoney;

答案 2 :(得分:0)

您的代码根本无法编译。修复程序已描述。但是要使ti完整: 正如您使用friendvar引用mbo.friendvar一样,对foodmoneyhobbymoney做同样的事情。

您还没有在构造函数中初始化foodmoneyhobbymoney。因此,在致电caldata(friends);时,您会在屏幕上看到随机结果。 最后:您用myBase friends;实例化了新对象,因此这是一个全新的对象,不受先前setdata()调用的影响。

您对此功能的底层要求未在您的问题中定义,我无能为力。