标题:友元函数用法问题
只看楼主
shanexia
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2013-11-17
结帖率:40%
已结贴  问题点数:15 回复次数:3 
友元函数用法问题
//简单的调用sales_item类
#include <iostream>
#include<string>
using namespace std;
void print();
void print()
    {
        cout<<isbn<<endl;
        cout<<units_sold<<endl;
        cout<<revenue<<endl;
    }


class sales_item
{
    friend void print();
    public:
    sales_item(const string &book="fuck!"):isbn(book),units_sold(0),revenue(0.0)
    {

    }
    sales_item(istream &is=cin)
    {
        cin >> isbn >> units_sold >> revenue;

    }
    private:
        int units_sold;
        double revenue;
        string isbn;
};

int main()
{
    sales_item s1(cin);
    print();
    return 0;
}
为什么有错误的显示isbn not  declared  units_sold not declared ,revenue not declared .
搜索更多相关主题的帖子: private include revenue public friend 
2014-07-29 20:29
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
得分:15 
回复 楼主 shanexia
程序代码:
//简单的调用sales_item类
#include <iostream>
#include<string>
using namespace std;

class sales_item;    // 我改了你的友元函数, 添加了一个参数, 但是参数需要用到 sales_item类, 而在使用前必须声明, 本处就是类声明。
void print(sales_item&);    /* 友元函数依旧是函数, 它只不过可以访问类的私有成员而已。 未来你会看到 很多个类(尤其是派生类) 都会用同一个友元函数(多态继承的时候调用 父类的友元函数, 你应该会看到), 那么如果你不添加参数, 编译器怎么知道(这个友元函数调用哪个对象) 或者 (这个函数是不是重载的结果)?! */

class sales_item
{
    friend void print(sales_item&);
    public:
    sales_item(const string &book = "fuck!"):isbn(book),units_sold(0),revenue(0.0)
    {

    }
    sales_item(istream &is = cin)
    {
        cin >> isbn >> units_sold >> revenue;

    }
    private:
        int units_sold;
        double revenue;
        string isbn;
};

void print(sales_item& x)    // 因为这里调用了对象 x, 所以 x的类型 sales_item 必须在其之前定义
{
    cout << x.isbn << endl;
    cout << x.units_sold << endl;
    cout << x.revenue << endl;
}

int main()
{
    sales_item s1(cin);
    print(s1);
    return 0;
}


帮你把代码改了, 你自己看吧。

自我放逐。。。
2014-07-29 21:51
shanexia
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2013-11-17
得分:0 
回复 2 楼 福尔摩斯
你说的一部分正确,但是你的代码编译未通过,我已经知道我的错误了,函数位置放错了。分还是给你吧。
2014-07-30 10:22
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
得分:0 
回复 3 楼 shanexia

哪里编译未通过?

自我放逐。。。
2014-07-30 21:05



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434533-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.626831 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved