c++的友元类
来源:互联网 发布:苹果mac输入法切换 编辑:程序博客网 时间:2024/06/15 04:14
friend声明可以位于类的任何地方
class B{...friend class A;//在类中声明A为该类的友元类...}
友元类A可以访问B类的公有,私有,保护成员,友元不能强加,只能有类自己指定
也可以只声明友元函数,指定Remote类的某个成员函数为TV类的友元
不过使用时有严格的声明顺序要求
class TV;//声明tv类,因为在Remote类中声明了TV类指针class Remote { ....;SetVol()};class TV {....;friend Remote::SetVol()};inline void Remote::SetVol() { ..... } //函数中使用楼TV类成员函数,需要在TV类定义了后再定义,可以在之前声明#include <iostream>using namespace std;class TV;//声明tv类class Remote{private:TV *m_ptv;public:Remote(TV *ptv):m_ptv(ptv) {}void onOff();//void volUp() { m_ptv->volUp();}//void volDown() { m_ptv->volDown();}void SetVol();};class TV{private:enum {On, Off};enum {Tv, Av};int state;int volume;int channel;public:TV(int vol, int chan, int st = Off):state(st),volume(vol),channel(chan){}bool isOn() const { return state == On; };void onOff(){state = (state = On) ? Off : On;}void volUp(){ volume++;}void volDown(){ volume--;}void chanUp() { channel++;}void chanDown() { channel--;}void GetPar() {cout << "state:" << state << endl<< "volume:" << volume << endl<< "channel:" << channel << endl;}//friend class Remote;friend void Remote::SetVol();};void Remote::SetVol(){m_ptv->volume = 20;}void Remote::onOff(){m_ptv->onOff();}int main(){TV*pTv = new TV(0, 1);Remote objR(pTv);pTv->GetPar();objR.onOff();//objR.volUp();pTv->GetPar();objR.SetVol();pTv->GetPar();delete pTv;}
2个类可以互相声明为友元类,需要注意的是声明和定义的顺序:假如TV类成员函数要使用Remote类的成员,可以在remote类声明之前声明,但是一定要在remote类声明之后定义,以便编译器有足够的信息编译
- c++/C 的用户手册
- C/C++:友元函数以及友元类的使用总结
- c的
- C/C++:C++友元类
- C,C++,C#,java的区别
- C,C++,C#,java的区别
- C,C++,C#,java的区别
- C&C++(1) - extern "C"的作用
- Awesome C/C++ (了不起的C/C++)
- 【linux/c/c++】linux C的开发
- C、C++、C# 三者的关系
- 完美的C++:C++/CLI
- c/c++/java的网址
- 完美的C++:C++/CLI
- 完美的C++:C++/CLI
- [c/c++]函数的隐藏
- 完美的C++:C++/CLI
- C++/C试题的答案
- MySQL Migration Toolkit浅谈
- Linux中tty、pty和pts概念及区别
- 开篇之词
- 五个Metro UI 风格的网页设计
- dom4j 应用小结
- c++的友元类
- Apache—DBUtil框架
- Oracle Linux 6.1 说明
- jsp处理表单及JS和JAVA变量互传
- activeMq配置
- chkdsk命令参数介绍
- Js获取当前日期时间及其它操作(转载)
- MMU、BOOTP
- 通过AutoConfig实现Form Server配置文件的修改