C++ Primer Plus 书之--C++ 友元类和友元成员函数

本文介绍了C++中的友元类和友元成员函数的概念。通过一个tv和remote类的例子说明了友元类的使用,强调了在处理类之间的友元关系时需要注意的声明顺序和前向声明。此外,还讨论了如何让特定成员函数成为友元,以及如何处理友元函数的内联代码问题。最后,提到了共同的友元,即一个函数可以同时是两个类的友元,以便访问它们的私有变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

友元类:

我们创建一个tv类, 一个remote类, 由于遥控器能够对tv进行换台, 因此需要remote类能够访问tv的成员, 所以remote类可以设置成一个友元类, 由于remote类中需要使用到tv的东西, 因此先声明tv, 后声明remote类, 如下所示:

// tv.h
#ifndef TV_H_
#define TV_H_

class Tv
{
private:
	int state;
	int volume;
	int maxchannel;
	int channel;
	int mode;
	int input;
	
public:
	// 友元类
	friend class Remote;
	enum{Off, On};
	enum{MinVal, MaxVal = 20};
	enum {Antenna, Cable};
	enum {TV, DVD};
	
	Tv(int s = Off, int mc = 125):state(s), volume(5), maxchannel(mc), channel(2), mode(Cable), input(TV){}
	void onoff() { state = (state == On)? Off : On; };
	bool ison() const {return state == On;}
	bool volup();
	bool voldown();
	void chanup();
	void chandown();
	void set_mode() {mode = (mode == Antenna) ? Cable : Antenna;}
	void set_input() {input = (input == TV) ? DVD : TV;}
	// 展示所有设置
	void settings() const;
};


class Remote
{
private:
	int mode;
public:
	Remote(int m = Tv::TV): mode(m) {}
	bool volup(Tv & t) {return t.volup();}
	bool voldown(Tv & t) {return t.voldown();}
	void onoff(Tv & t) { t.onoff(); }
	void chanup(Tv & t) { t.chanup(); }
	void chandown(Tv & t) { t.chandown(); }
	// 此方法需要直接使用Tv类的私有变量channel, 所以需要友元函数的作用
	// 而其他类实际都是使用的Tv的共有方法进行的设置
	void set_chan(Tv & t, int c) {t.channel = c;}
	void set_mode(Tv & t) {t.set_mode();}
	void set_input(Tv & t) {t.set_input();}
};

#endif

第二个文件:

// tv.cpp
#include <iostream>
#include "tv.h"

bool Tv::volup()
{
	if(volume < M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值