Other combinations of friends and classes besides the ones discussed so far in this chapter are possible. Let’s take a brief look at some of them now.
Suppose the advance of technology brings interactive remote controls. For example, an interactive remote control unit might let you enter a response to some question posed on a television program, and the television might activate a buzzer in your remote control if your response is wrong. Ignoring the possibility of television using such facilities to program the viewers, let’s just look at the C++ programming aspects. The new setup would benefit from mutual friendship, with some Remote
methods being able to affect a Tv
object, as before, and with some Tv
methods being able to affect a Remote
object. This can be accomplished by making the classes friends to each other. That is, Tv
will be a friend to Remote
in addition to Remote
being a friend to Tv
. One point to keep in mind is that a Tv
method that uses a Remote
object can be prototyped before the Remote
class declaration but must be defined after the declaration so that the compiler will have enough information to compile the method. The setup would look like this:
class Tv
{
friend class Remote;
public:
void buzz(Remote & r);
...
};
class Remote
{
friend class Tv;
public:
void Bool volup(Tv & t) { t.volup(); }
...
};
inline void Tv::buzz(Remote & r)
{
...
}
Because the Remote
declaration follows the Tv
declaration, Remote::volup()
can be defined in the class declaration. However, the Tv::buzz()
method has to be defined outside the Tv
declaration so that the definition can follow the Remote
declaration. If you don’t want buzz()
to be inline, you need to define it in a separate method definitions file.
3.145.50.222