c++ 友元类 友元类方法
一、友元类
#pragma once #include"Tv.h" class Remote { public: void chanDown(Tv& tv); };
#pragma once class Tv { public: friend class Remote; void chandown(); Tv(int maxChannel=10); private: int channel; int maxChan; };
Remote作为Tv的友元类,就需要告知在Tv类的声明中告知Tv,我的朋友Remote能访问我的所有成员方法、变量,
所以要在Tv类里这样声明:friend class Remote;
二:友元方法
class AirConditioner; class AirRemote { public: void set_c(AirConditioner& ac, int c); }; class AirConditioner { private: int c; friend void AirRemote::set_c(AirConditioner& ac, int c1); public: AirConditioner(int c1 = 26); };
有时后我们只想把私有变量暴露给某个类的某个方法能访问,比如 只让(AirConditioner)空调遥控器的设置温度的方法(set_c) 能访问 空调(AirConditioner)的私有变量 c,
就要向上面这样声明。
先前向声明:AirConditioner,然后声明AirRemote最后在声明AirConditioner。这个顺序是不能变的。
#include"FriendClassMethod.h" #include<iostream> AirConditioner::AirConditioner(int c1) { this->c = c1; } void AirRemote::set_c(AirConditioner& ac, int c1) { ac.c = c1; std::cout << "空调设置为: " << ac.c << "摄氏度\n"; }
三.互为友元
如果两个类某些方法互相都要访问对方成员,这个时候,可以声明为友元函数,不是某个它们之间的某个类的成员函数,就普通的友元函数就可以了。参数记得上带上这两个类的引用就可以了。或者互相声明为对方的友元类。