在实用中,上述用法极少使用。由于类的封装性使得其外部难 以破坏其内部数据,所以,若需要将一个类中的某个成员函数 说明为另一个类的友元,特别是需要将多个成员函数说明为另 个类的友元时,常常直接将整个类说明成另一个类的友元 将一个类说明成另一个类的友元,实际上是将类中所有的成员 函数说明成另一个类的友元。例如,上例可以将类Y中的友 元说明改为 friend class X: 这样就将类X中所有成员函数都说明成类Y的友元 应当说明的是:虽然使用友元可以提高程序的运行效率,但友 元就像在类的封装上打了一些洞。这样的洞越多类的封装就被 破坏的越严重。因此在实用中要仔细地权衡效率和安全之间的 矛盾,以决定是否使用以及如何使用友元。另外,当类A被 授权为类B的友元后,只有类A中包含有类B参数的成员函 数才有条件访问类B中的所有成员
在实用中,上述用法极少使用。由于类的封装性使得其外部难 以破坏其内部数据,所以,若需要将一个类中的某个成员函数 说明为另一个类的友元,特别是需要将多个成员函数说明为另 一个类的友元时,常常直接将整个类说明成另一个类的友元。 将一个类说明成另一个类的友元,实际上是将类中所有的成员 函数说明成另一个类的友元。例如,上例可以将类 Y 中的友 元说明改为: friend class X; 这样就将类 X 中所有成员函数都说明成类 Y 的友元。 应当说明的是:虽然使用友元可以提高程序的运行效率,但友 元就像在类的封装上打了一些洞。这样的洞越多类的封装就被 破坏的越严重。因此在实用中要仔细地权衡效率和安全之间的 矛盾,以决定是否使用以及如何使用友元。另外,当类 A 被 授权为类 B 的友元后,只有类 A 中包含有类 B 参数的成员函 数才有条件访问类 B 中的所有成员
112虚函数 11.2.1虚函数 虚函数是类中的一个用关键字rtua修饰的成员函数 virtual type func name( arg List func body, 个函数一经说明为虚函数,则无论说明它的类被继承了多少 层,在每一层派生类中该函数将永远保持其vual特性 定义虚函数的目的是为了让派生类覆盖( Overriding)它。覆 盖不同于重载,它要求重新定义的函数在参数和返回值方面与 原函数完全相同。否则将属于重载(参数不同)或导致一个编 译错误(返回值类型不同)。与函数重载相同,虚函数也体现 了OOP技术的多态性
11.2 虚函数 11.2.1 虚函数 虚函数是类中的一个用关键字 virtual 修饰的成员函数。 virtual type func_name(<arg_List>) { func_body; } 一个函数一经说明为虚函数,则无论说明它的类被继承了多少 层,在每一层派生类中该函数将永远保持其 virtual 特性。 定义虚函数的目的是为了让派生类覆盖(Overriding)它。覆 盖不同于重载,它要求重新定义的函数在参数和返回值方面与 原函数完全相同。否则将属于重载(参数不同)或导致一个编 译错误(返回值类型不同)。与函数重载相同,虚函数也体现 了 OOP 技术的多态性