练习7.16:

在类的定义中,可以包含0个或者多个访问说明符,并且对于某个访问说明符能出现多少次以及能出现在哪里都没有严格规定。每个访问说明符指定接下来的成员的访问级别,有效范围直到出现下一个访问说明符或者到达类的结尾为止。
一般来说,作为接口的一部分,构造函数和一部分成员函数应该定义在public说明符之后,而数据成员和作为实现部分的函数则应该跟在private说明符之后。

练习7.17:
类可以在它的第一个访问说明符之前定义成员,对这种成员的访问权限依赖于类定义的方式。如果使用struct关键字,则定义在第一个访问说明符之前的成员是public的;相反,如果使用class关键字,则这些成员是private的。

练习7.18:
封装是指保护类的成员不被随意访问的能力。通过把类的实现细节设置为private,我们就能完成类的封装。封装实现了类的接口和实现的分离。

封装有两个重要的优点:一是确保用户代码不会无意间破坏封装对象的状态;二是被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码。
一旦把数据成员定义成private的,类的作者就可以比较自由地修改数据了。当实现部分发生改变时,只需要检查类的代码本身以确认这次改变有什么影响;换句话说,只要类的接口不变,用户代码就无须改变。如果数据是public的,则所有使用了原来数据成员的代码都可能失效,这时我们必须定位并重写所有依赖于老版本实现的代码,之后才能重新使用该程序。
把数据成员的访问权限设成private还有另外一个好处,这么做能防止由于用户的原因造成数据被破坏。如果我们发现有程序缺陷破坏了对象的状态,则可以在有限的范围内定位缺陷:因为只有实现部分的代码可能产生这样的错误。因此,将错误的搜索限制在有限范围内将能极大地简化更改问题及修正程序等工作。

练习7.19:
我们把数据成员strName和strAddress设置为private,这样可以避免用户程序不经意间修改和破坏它们;同时把构造函数和两个获取数据成员的接口函数设置为public,以便于我们在类的外部访问。

《C++ Primer》7.2节练习相关推荐

  1. C++primer 10.6节练习

    练习10.42 1 #include<iostream> 2 #include<string> 3 #include <iostream> 4 #include & ...

  2. c++ primer 4.4节练习答案

    练习4.13 a) d=3.0, i=3 b) i=3, d=3.5 练习4.14 第一个:非法,42是一个右值,右值不能当做左值使用 第二个:返回值总为真 练习4.15 pi是指针类型,不可将int ...

  3. c++ primer 3.6节练习答案

    练习3.43 版本1 1 int main() 2 { 3 using int_array = int[4]; 4 int cnt = 0; 5 int ia[3][4]; 6 for (int_ar ...

  4. 《C++ Primer》第14章 14.3节习题答案

    <C++ Primer>第14章 操作重载与类型转换 14.3节  算术和关系运算符  习题答案 练习14.13:你认为Sales_data类还应该支持哪些其他算术运算符(参见表4.1,第 ...

  5. 《C++ Primer》第9章 9.3节习题答案

    <C++ Primer>第9章 顺序容器 9.3节顺序容器操作习题答案 练习9.18:编写程序,从标准输入读取string序列,存入一个deque中.编写一个循环,用迭代器打印deque中 ...

  6. 《C++ Primer》第5章 5.2节习题答案

    <C++ Primer>第5章 语句 5.2节 语句作用域 练习5.4:说明下列例子的含义,如果存在问题,试着修改它. (a)while(string::iterator iter != ...

  7. 《C++ Primer》第15章 15.4节习题答案

    <C++ Primer>第15章 面向对象程序设计 15.4节 抽象基类 习题答案 练习15.15:定义你自己的Disc_quote和Bulk_quote. [出题思路]本题练习实现不同折 ...

  8. 《C++ Primer》第15章 15.2节习题答案

    <C++ Primer>第15章 面向对象程序设计 本章介绍了面向对象程序设计的两个重要概念:继承和动态绑定,包括: □●继承.基类.派生类的基本概念. □●虚函数和虚基类. □●继承中的 ...

  9. 《C++ Primer》第13章 13.5节习题答案

    <C++ Primer>第13章 拷贝控制 13.5节 动态内存管理类 习题答案 练习13.39:编写你自己版本的StrVec,包括自己版本的reserve.capacity(参见9.4节 ...

  10. 《C++ Primer》第12章 12.3节习题答案

    <C++ Primer>第12章 动态内存 12.3节使用标准库:文本查询程序 习题答案 练习12.27:TextQuery和QueryResult类只使用了我们已经介绍过的语言和标准库特 ...

最新文章

  1. 10-03视图的优缺点及注意事项
  2. AjaxControlTookit中的AutoCompleteExtender位置错位问题 ListSearchExtender不支持中文的问题...
  3. IntelliJ Idea注释模板--类注释、方法注释
  4. 惠普与4PS联络中心国际标准组织达成战略合作
  5. 最新原生nodejs调试器的使用大全详解
  6. oracle vm virtualbox无网络连接_VirtualBox 安装 Windows 2000/XP 测试
  7. dub怎么生成这么大的垃圾呢.
  8. 使用 npm shrinkwrap 来管理项目依赖
  9. 网站检测-网站检测软件-免费网站安全检测工具
  10. 不必再狂按空格键了!Word 里文字对齐推荐这4种方法
  11. QQ远程协助,不能远程操作对方WIN7 旗舰版 电脑的系统组件
  12. python图片转pdf
  13. webrtc分辨率和比特率--问题集锦
  14. hdu2795 线段树应用:找到线段树中=给定值的第一个元素位置 并 更新该点)
  15. 零基础入门学习Python--永久存储:腌制一缸美味的泡菜
  16. matlab曲线导入cad,MATLAB导入CAD数据.docx
  17. MATLAB光谱特征波长提取,uve算法提取光谱特征波长
  18. [推荐系统]个性化推荐的十大挑战
  19. 「镁客早报」SpaceX猎鹰或将携带3.6万蠕虫登陆空间站;苹果分析师透露AirPoda半年内迎来升级...
  20. 喜鹊招牌体-喜鹊造字喜鹊字体

热门文章

  1. 【经典回放】多种语言系列数据结构算法:树(C#、JavaScript、VB6版)
  2. Git之cherry-pick命令
  3. Android之各个手机版本WiFi热点的创建
  4. 递归和非递归实现规律函数
  5. Android之使用getIdentifier()获取资源Id
  6. Android之Gradle Plugin Samples 之Gradle Library Projects
  7. 服务器安全维护包含,服务器安全维护包含
  8. 她半年内举报了755篇问题论文,专挑中国“下手”?还牵扯到北大副校长.........
  9. 难以摸透的直男脑回路......
  10. 理科生浪漫起来,谁都顶不住!