友元
一般情况下,一个函数如果不是一个类的成员函数,是不能访问该类的私有成员的;同理其他类也不能访问别的类的私有成员。但是,友元提供了一种机制,是得我们可以在别的类中或者其他函数中访问一个类的私有部分。只需要在待访问的这个类中加入以friend开头的这个函数或者这个类的声明:
class Sales_item
{
public:
std::istream& input(std::istream& in);
std::ostream& output(std::ostream& out);
inline double avg_price() const;
bool same_isbn(const Sales_item &rbs) const
{
return isbn == rbs.isbn;
}
Sales_item Sales_item::add(Sales_item& other);
friend Sales_item add(const Sales_item &,const Sales_item &);
Sales_item(const std::string &book = "7115145547",unsigned sold = 0,double rvn = 0.0):isbn(book),units_sold(sold),revenue(rvn){}
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
其中
Sales_item Sales_item::add(Sales_item& other)
{
revenue += other.revenue;
units_sold += other.units_sold;
return *this;
}
Sales_item add(const Sales_item &obj1,const Sales_item &obj2)
{
if(!obj1.same_isbn(obj2))
return obj1;
Sales_item tmp;
tmp.isbn = obj1.isbn;
tmp.units_sold = obj1.units_sold + obj2.units_sold;
tmp.revenue = obj1.revenue + obj2.revenue;
return tmp;
}
则在主函数中调用total = trans1.add(trans2);或者total = add(trans1,trans2);结果是相同的。
友元函数的主要优点在于:是得非成员函数也可以灵活得访问一个类的私有成员(以及受保护成员),便于与其他不支持类概念的语言(c语言,汇编)进行混合编程;但是这样做的缺点在于破坏了类的封装性。在不使用友元的时候,如果要改进代码,只需要完善类,而不需要改变用户级代码,而友元的出现却是得我们有时也需要修改友元函数和友元类了。
最后有一点需要注意:你可以把友元函数的声明放在类中的任何位置,但是通常情况下,把它们集中放置在类的开始或者结束位置会更好一些,而不是想我的示例程序那样放置。
分享到:
相关推荐
③ 对于友元成员和友元类两种实现方式,可以另外定义一个求解两点距离的ComputeDistance类,将distance()作为该类的成员函数; ④ 设计main()测试函数,并准备好合适的测试数据。 (3)程序调试运行 运行程序查看...
友元函数,类外普通函数声明为类的友元,之后即可与类共享数据
本文档详细介绍了C++友元函数及友元类,方便大家对比学习
关于c+模板之友元类友元函数的实例化,图形界面之矩形。
友元成员,A类中的成员函数f声明为B为的友元,此时函数f就称为友元成员
让你很好的理解C++友元接口问题。加油,让我们一起冲刺C++。
友元是一种类与类外数据共享的机制,包括友元函数、友元成员、友元类三种
主要讲解c++种的友元类友元函数 可以更好地学习其中的内容 友元在类中担任着十分关键的角色 所以更应该认真学习
友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有...
这是关于C++中、如何将普通函数声明友元函数的、求间隔日期的例子。适用于C++初学者学习用。
实例讲解C++友元,利用实例讲解C++友元的知识
各种友元应用举例。欢迎大家下载使用。 各种友元应用举例。欢迎大家下载使用。
数据共享与友元的使用
1. 友元的使用。 2. 掌握重载函数的实现方法。 3. 综合应用。
用vc++友元类程序的编写。程序用vc++6.0开发,其中关于年月份的判断相对前面,程序简单易懂。
如何声明和创建友元类 简单友元类的声明,C++中友元类的应用范围
简单的友元类,简单的测试了友元函数与友元类,属于概念性的测试
全面讲解C++友元知识,更加详细的讲述C++中友元机制,还配有代码讲解,十分详细!
运算符重载:友元(friend)函数问题
我们知道,基类的private成员在派生类中不能被访问。那么,友元函数能否继承。(举例说明)