c++ 友元类 练习题

#include 
using namespace std;

// 前向声明
class TV;

// 友元类声明(其中的几个函数为友元)
class Remote
{
public:
	void volume_to(TV &tv, int x);
	void channel_to(TV &tv, int x);
};

// 类声明
class TV
{
public:
	enum{off=0, on=1};
	// 声明友元函数
	friend void Remote::volume_to(TV &tv, int x);
	friend void Remote::channel_to(TV &tv, int x);
	// 成员函数
	TV(int st=on):state(st),channel(5),volume(20){};
	void onoff(){state^=1; cout<<"now state is "<<(state?"on":"off")<


结果如下:
c++ 友元类 练习题_第1张图片


可以看到,在TV类中只声明几个Remote类内的函数作为友元函数操作起来是比较麻烦的,需要使用到前向声明forward declaration

但如果将整个remote类作为友元类,则只需在class TV中添加 friend class Remote;即可

总之

  • 在声明与调用时,要注意先给出相关函数定义,否则是行不通的,特别要注意的是,TV类和Remote类的顺序是不能换的!
  • 因为TV类中有 Remote:: ,所有必须在TV类之前给出Remote类的定义;
  • 而Remote类中又用到了TV类,因此又必须在Remote类之前给出TV类的前向声明;
  • 同时,Remote类中只能包含声明而不能有具体的实现方法,因为实现方法需要调用TV类中的成员,而此时TV类中的细节还没有给出;
  • 最后把Remote类的定义放在TV类的后面,如此环环相扣,最终实现类中友元函数的定义。

你可能感兴趣的:(C++)