15.1.3 其他友元关系
除本章前面讨论的,还有其他友元和类的组合形式,下面简要地介绍其中的一些。
假设由于技术进步,出现了交互式遥控器。例如,交互式遥控器让您能够回答电视节目中的问题,如果回答错误,电视将在控制器上产生嗡嗡声。忽略电视使用这种设施安排观众进入节目的可能性,我们只看C++(www.cppentry.com)的编程(www.cppentry.com)方面。新的方案将受益于相互的友情,一些Remote方法能够像前面那样影响Tv对象,而一些Tv方法也能影响Remote对象。这可以通过让类彼此成为对方的友元来实现,即除了Remote是Tv的友元外,Tv还是Remote的友元。需要记住的一点是,对于使用Remote对象的Tv方法,其原型可在Remote类声明之前声明,但必须在Remote类声明之后定义,以便编译器有足够的信息来编译该方法。这种方案与下面类似:
由于Remote的声明位于Tv声明的后面,所以可以在类声明中定义Remote::volup( ),但Tv::buzz( )方法必须在Tv声明的外部定义,使其位于Remote声明的后面。如果不希望buzz( )是内联的,则应在一个单独的方法定义文件中定义它。