您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 友元函数的问题

友元函数的问题

来源:网络整理     时间:2016/9/8 5:45:15     关键词:

关于网友提出的“ 友元函数的问题”问题疑问,本网通过在网上对“ 友元函数的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 友元函数的问题
描述:

#include
#include
using namespace std;
class Sales_item
{
public:
friend Sales_item add(const Sales_item &s1,const Sales_item &s2);
Sales_item(string str,int ival,float fval):isbn(str),units_sold(ival),revenue (fval){}
private:
string isbn;
int units_sold;
float revenue;
};
Sales_item add(Sales_item &s1,Sales_item &s2)//两个对象相加
{
Sales_item temp("",0,0);
temp.units_sold = s1.units_sold +s2.units_sold;//编译错误
temp.revenue = s1.revenue + s2.revenue;// 编译错误
return temp;
}
 在友元函数中定义的一个类的对象能不能引用私有数据成员?C++primer 习题答案上也是这样写的,难道书上写错了?请高手修正一下。


解决方案1:

LZ估计是用VC6.0的吧~!~
有元函数是可以访问私有成员的,VC6.0下要麻烦点


class Sales_item;                   //提前申明
Sales_item add(const Sales_item &s1,const Sales_item &s2);
//加上上面两句就OK了
class Sales_item
{
public:
    friend Sales_item add(const Sales_item &s1,const Sales_item &s2);
    Sales_item(string str,int ival,float fval):isbn(str),units_sold(ival),revenue (fval){}
private:
    string isbn;
    int units_sold;
    float revenue;
};
Sales_item add(const Sales_item &s1,const Sales_item &s2)//两个对象相加
{
    Sales_item temp("",0,0);
    temp.units_sold = s1.units_sold +s2.units_sold;//编译错误
    temp.revenue = s1.revenue + s2.revenue;// 编译错误
    return temp;
}
解决方案2:

lz回来结贴

解决方案3:


#include
#include
using namespace std;
class Sales_item
{
public:
friend Sales_item add(const Sales_item &s1,const Sales_item &s2);    //////////声明
Sales_item(string str,int ival,float fval):isbn(str),units_sold(ival),revenue (fval){}
private:
string isbn;
int units_sold;
float revenue;
};
Sales_item add(Sales_item &s1,Sales_item &s2)//两个对象相加  定义里面的const不见了??加上试试
{
Sales_item temp("",0,0);
temp.units_sold = s1.units_sold +s2.units_sold;//编译错误
temp.revenue = s1.revenue + s2.revenue;// 编译错误
return temp;
}
解决方案4:


#include
#include
using namespace std;
class Sales_item
{
public:
friend Sales_item add(const Sales_item &s1,const Sales_item &s2);
Sales_item(string str,int ival,float fval):isbn(str),units_sold(ival),revenue (fval){}
private:
string isbn;
int units_sold;
float revenue;
};
Sales_item add(const Sales_item &s1,const Sales_item &s2)//两个对象相加
{
Sales_item temp("",0,0);
temp.units_sold = s1.units_sold +s2.units_sold;//编译错误
temp.revenue = s1.revenue + s2.revenue;// 编译错误
return temp;
}
解决方案5:

友元可以访问类的私有和受保护数据

解决方案6:


#include
#include
using namespace std;
class Sales_item
{
public:
friend Sales_item add(const Sales_item &s1,const Sales_item &s2);
Sales_item(string str,int ival,float fval):isbn(str),units_sold(ival),revenue (fval){}
private:
string isbn;
int units_sold;
float revenue;
};
Sales_item add(const Sales_item &s1,const Sales_item &s2)//两个对象相加
{
Sales_item temp("",0,0);
temp.units_sold = s1.units_sold +s2.units_sold;//编译错误
temp.revenue = s1.revenue + s2.revenue;// 编译错误
return temp;
}
解决方案7:

一般不用来引用私有成员  用一个公有函数来控制私有成员的访问


以上介绍了“ 友元函数的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3791052.html

相关图片

相关文章