C++:友元函数、友元类
友元意义:在类的外部定义的函数或类可以访问其类内部的私有、公有变量。
实际操作(用《C++ Primer plus》范例):
1友元函数
友元函数使用就是在类中声明,然后外边定义。但其实这个函数并不属于这个类。
//一个电视机类 class CTV { public: CTV(); friend void SetOn( CTV & pC);//友元函数 friend void SetOff(CTV & pC);//友元函数 void SetbOnOff(); private: enum { on = true, off = false }; bool bOnOff; }; CTV::CTV() :bOnOff(false) { } //友元函数再类中声明过后可以访问类的私有变量 void SetOn(CTV & pC) { pC.bOnOff = pC.on; } void SetOff(CTV & pC) { pC.bOnOff = pC.off; }
//使用 int main() { CTV aTV; SetOn(aTV); SetOff(aTV); CRemote aRemote(aTV); aRemote.SetOn(); }
2友元类
可以看到这里在构造这个类时引入了CTV这个类,我认为这是在实际应用中常用方法。
//一个电视机类 class CTV { public: CTV(); friend class CRemote;//友元类 void SetbOnOff(); private: enum { on = true, off = false }; bool bOnOff; }; CTV::CTV() :bOnOff(false) { } //友元类在类中声明后可以访问类的私有变量 //同时认为在实际用途中常用如下构造函数方案去引入类这样之前的类。 class CRemote { public: CRemote(CTV & pC) :myTV(pC) {}; void SetOn() { myTV.bOnOff = myTV.on; } private: CTV & myTV; }; int main() { CTV aTV; CRemote aRemote(aTV); aRemote.SetOn(); }
才疏学浅,请多指教。