一,友元

1)可以将类作为友元,友元类的所有方法都可以访问原始类的私有成员和保护成员。

2)下面例子介绍了 电视类和遥控器类,其中遥控器类为电视类的友元类

3)注意:友元关系不具对称性。即 A 是 B 的友元,但 B 不一定是 A 的友元。 友元关系不具传递性。即 B 是 A 的友元,C 是 B 的友元,但是 C 不一定是 A 的友元。

#include <iostream> using namespace std; class TV { private: int state;// on or off int volume; //assumed to be digitized int maxchannel;// maximum number of channels int channel;//current channel settings int mode;//broadcast or cable int input;//tv or vcr public: friend class Remote;//遥控器类 enum{off,on}; //枚举 enum{minval,maxval=20}; enum{antenna,cable}; enum{tv,vcr}; TV(int s=off,int mc=100):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)?vcr:tv; } void settings()const; } ; class Remote//遥控器友元类 { private: int mode; public: Remote(int m=TV::tv):mode(m){} //遥控的是电视而不是 vcr bool volup(TV &t){ //遥控器的操作都是来源于电视对自身的操作 ,所以友元遥控器的方法都是调用电视的成员函数 return t.volup(); } bool voldown(TV &t){ return t.voldown(); } void onoff(TV &t){ return t.onoff(); } void chanup(TV &t){ return t.chanup(); } void chandown(TV &t){ return t.chandown(); } void set_chan(TV &t,int c){ //唯一需要作为友元的方法,因为它用来访问TV类的private成员 t.channel=c; } void set_mode(TV &t){ t.set_mode(); } void et_input(TV &t){ t.set_input(); } }; /*下面是电视的成员方法实现*/ bool TV::volup() { if(volume<maxval) { volume++; return true; } else return false; } bool TV::voldown() { if(volume>minval) { volume--; return true; } else return false; } void TV::chanup() { if(channel<maxchannel) channel++; else channel=1; } void TV::chandown() { if(channel>1) channel--; else channel=maxchannel; } void TV::settings()const { cout<<"tv is "<<(state == off?"on":"off")<<endl; if(state == on) { cout<<"volume setting ="<<volume<<endl; cout<<"channel setting ="<<channel<<endl; cout<<"Mode ="<<(mode == antenna?"cable":"antenna")<<endl; cout<<"Input ="<<(input == tv?"vcr":"tv")<<endl; } } int main() { TV s27; cout<<"initinal settings for 27\" tv:\n"; s27.settings(); s27.onoff(); s27.chanup(); cout<<"adjust settings for 27\"tv:"; s27.settings(); return 0; } 输出为:

二,嵌套类

1)嵌套与包含的区别

包含意味着将类对象作为另一个类的成员

对类进行嵌套,不创建类成员,而是定义了一种类型,该类型仅在包含嵌套类的类中使用。struct (结构)实际上是一种嵌套类

2)嵌套类和访问权限

声明位置 包含它的类是否可以使用 从包含它的类派生出来的类,是否可以使用 外部世界是否可以使用
私有部分
保护部分
共有部分

转载于:https://www.cnblogs.com/JPAORM/archive/2012/03/27/2510017.html

【C++ Primer】第十五章 友元、异常和其他 --之一---友元和嵌套类相关推荐

  1. 吴恩达《机器学习》第十五章:异常检测

    文章目录 十五.异常检测 15.1 问题的动机 15.2 高斯分布 15.3 算法 15.4 开发和评价一个异常检测系统 15.5 异常检测 VS 监督学习 15.6 选择特征 15.7 多元高斯分布 ...

  2. [C++ Primer] 第十五章的句柄类

    1 为什么要使用句柄类? 句柄?windows中的句柄吗?那不是一个整数吗?不是,当然不是.句柄类应该算是C++中的一种技术,一种管理指针的技术,一种实现面向对象编程的技术. 为什么要使用句柄呢? 多 ...

  3. 第十五章 异常检测-机器学习老师板书-斯坦福吴恩达教授

    第十五章 异常检测 15.1 问题动机 15.2 高斯分布 15.3 算法 15.4 完善和评估一个异常检测系统 15.5 异常检测 vs 监督学习 15.6 选择使用的特征 15.7 多元高斯分布 ...

  4. 20190901 On Java8 第十五章 异常

    第十五章 异常 要想创建健壮的系统,它的每一个构件都必须是健壮的. 异常概念 C++的异常处理机制基于 Ada,Java 中的异常处理则建立在 C++的基础之上(尽管看上去更像 Object Pasc ...

  5. 《Windows核心编程》读书笔记二十五章 未处理异常,向量化异常处理与C++异常

    第二十五章  未处理异常,向量化异常处理与C++异常 本章内容 25.1 UnhandledExceptionFilter函数详解 25.2 即时调试 25.3 电子表格示例程序 25.4 向量化异常 ...

  6. Java(第十五章)

    第十五章 一.字符串类String 1.String是一个类,位于java.lang包中 2.创建一个字符串对象的2种方式: String 变量名="值"; String 对象名= ...

  7. 分布式系统概念和设计 第十五章 (1)

    COORDINATION AND AGREEMENT http://www.cdk5.net/wp/ 背景知识点:Reliable failure detector 实际系统中没有reliable f ...

  8. 第十五章 面向对象程序设计

    第十五章 面向对象程序设计 OOP:概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承和动态绑定. 继承(inheritance): 通过继承联 ...

  9. 第十五章 - 垃圾回收相关算法

    第十五章 - 垃圾回收相关算法 文章目录 第十五章 - 垃圾回收相关算法 1.标记阶段:引用计数算法 1.1 垃圾标记阶段:对象存活判断 1.2 引用计数算法 1.3 小结 2.标记阶段:可达性分析算 ...

  10. 达芬奇密码 第五十五章 第五十六章

    达芬奇密码 第五十五章 第五十六章[@more@] 第五十五章 索菲靠着兰登坐在长沙发上,喝着茶吃着烤饼,享受着食物的美味.雷·提彬爵士微笑着,在炉火前面笨拙地踱来踱去.假肢敲在地面上,发出" ...

最新文章

  1. PAT (Advanced Level) 1078. Hashing (25)
  2. python的编程模式-实例讲解Python设计模式编程之工厂方法模式的使用
  3. MapReduce程序的优化
  4. python多线程理解
  5. 【BCVP】实现基于 Redis 的消息队列
  6. n型半导体和p型半导体的区别_PNP和NPN的区别和判别方法,网友:太厉害了!终于有人能讲明白了...
  7. php和c语言的字符数组中,字符数组和字符串的区别,C语言字符数组和字符串区别详解...
  8. C++之继承探究(十):抽象基类与纯虚函数
  9. MySQL Control Flow Functions(控制流)
  10. jq cookie的使用
  11. java action 参数_Structs复习 Action传递参数
  12. PHP网站批量自动发外链工具源码
  13. iSlide(PPT增强插件)官方正式版V5.6.1 | islide插件下载ppt插件在哪里下载?
  14. 四时之诗:蒙曼品美唐诗读后感
  15. GMQ钱包积极打造并维护区块链健康生态的发展
  16. 冻结Excel表格中前两行不滚动问题
  17. Android App 安全登录认证解决方案
  18. EAccessViolation型错误
  19. 【ACM- OJ】《六度分离》C++
  20. 启动tomcat卡在“信息: Destroying ProtocolHandler”

热门文章

  1. 二叉树与树、森林之间的转换
  2. -2147467259
  3. 傳統經理人的迷思(转)
  4. 今天算做正式开始SP开发吧,第一步当然是将down下来的资料好好地看一看,顺便也记下这些有用的地址...
  5. 【jQuery笔记Part1】01-jQuery简介集成
  6. 校招刷题---java选择题笔记02
  7. Windows加域提示 已超出此域允许的创建的计算机账户的最大值,请联系统管理员
  8. 实战篇:教你建设企业销售分析系统
  9. dom4j获取指定节点值_XML解析之DOM4j以及XPATH技术
  10. python三维数组表示方法_Python操作多维数组和矩阵