将关键字const加在形参表之后,就可以将成员函数声明为常量,const成员不能改变其所操作的对象的数据成员,const必须同时出现在声明和定义中.

数据抽象和封装的两个重要优点:
1)避免类内部出现无意的,可能破坏对象状态的用户级错误。
2)随时间推移可以根据需求改变或缺陷报告来完善类实现而无需改变用户级代码。

构造函数初始化式
初始化列表
Sales_item::Sales_item(const string &book):isbn(book),units_sold,revenue(0.0){}
等价于
Sales_item::Sales_item(const string &book)
{
isbn=book;units_sold=0;revenue=0.0;
}

初始化数据成员与对数据成员赋值的含义是什么?有什么区别?
首先把数据成员按类型分类并分情况说明:
1.内置数据类型,复合类型(指针,引用)
在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的
2.用户定义类型(类类型)
结果上相同,但是性能上存在很大的差别。因为类类型的数据成员对象在进入函数体前已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,调用构造函数,在进入函数体之后,进行的是对已经构造好的类对象的赋值,又调用个拷贝赋值操作符才能完成(如果并未提供,则使用编译器提供的默认按成员赋值行为)

没有默认构造函数的类类型的成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化列表中。

没有初始化内置或复合类型的构造函数,将使那些成员处于未定义的状态。除了作为赋值的目标外,以任何方式使用一个未定义的成员都是错误的。

当构造函数被声明为explicit时,编译器将不使用它作为转换操作符。除非有明显的理由想要定义隐式转换,否则单形参构造函数应该为explicit。将狗仔函数设置为explicit可以避免错误,并且当装换有用时,用户可以显式地构造对象。

友元:允许一个类将对其非公有成员的访问授权予制定的函数或类。

友元可以是普通的非成员函数或前面定义的其他类的成员函数,或是整个类。将一个类设为友元,友元类的所有成员函数都可以访问授予友元关系的那个类的非公有成员。

static成员的优点
1)static成员的名字在类的作用域中,因此可以避免与其他类的成员或全局对象名字对象。
2)可以实施封装,static成员可以使私有成员,全局对象不可以是私有成员。
3)通过阅读程序容易看出static成员是与特定类关联的,这种可见性可清晰地显示程序员的意图。
static成员是类的组成部分而不是任何对象的组成部分,因此无this指针,不能被声明为const,也不能被声明为虚函数。
在类定义体外部引用类的static成员时,必须指定成员是哪个类中定义的。
static关键字只能用于类定义内部的声明中。

转载于:https://blog.51cto.com/8672742/1368365

再学C++ Primer(9)-类相关推荐

  1. 学完C再学C++(6)继承类

    /* 第12章 类的继承 1.派生一个类     class NewClassName: public FatherClassName{     //自己的构造函数,数据成员和成员函数     }   ...

  2. 第三次学JAVA再学不好就吃翔(part106)--字符流

    学习笔记,仅供参考,有错必纠 文章目录 IO流 字符流输入流FileReader 字符流是什么 FileReader类构造方法 举个例子 字符流输出流FileWriter FileWriter构造方法 ...

  3. 会python学php难吗_会python再学php难吗

    会python再学php难吗?当然不会难!首先语言都是想通的,只是语法的区别,而且PHP入门简单,即便是零基础的小白入门也不会有太大的压力,更何况已经有编程基础了,上手PHP会更快! 推荐:<P ...

  4. 后端用java还是python_【后端开发】已学php再学java还是python?

    在考虑学java还是python之前先来说说二者的应用领域. Python的主要应用方向: 1.科学计算 随着NumPy,SciPy,Matplotlib,Enthoughtlibrarys等众多程序 ...

  5. 测绘类专业计算机要学什么科目,测绘类专业选考科目要求是什么

    测绘类专业选考科目要求是什么2019-08-23 14:49:46文/尹乙晴 高考综合改革实施方案"3+1+2"模式已经逐步实施,大家都很想知道各专业对科目的要求是什么样的,以下是 ...

  6. Python基础学完了再学什么?

    Python基础学完了再学什么? 基础阶段学完Python 基础语法.python 容器.函数和文件操作.面向对象. python编程和web基础.Linux 操作系统多任务编程.Python 网络编 ...

  7. 《手把手陪您学Python》42——类的魔法方法

    在上一篇<手把手陪您学Python>41--类方法与实例方法中,我们引入了类方法的概念,并介绍了类方法与实例方法在语法规则和引用方面的差异.今天,我们将会继续介绍实例方法的应用,并介绍一种 ...

  8. 语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程。...

    语言都是相通的,学好一门语言,再学第二门语言就很简单,记录一下我复习c语言的过程. 为了将本人的python培训提高一个层次,本人最近买了很多算法的书. 这个书上的代码基本都是c语言实现的,c语言很久 ...

  9. [Python]再学 socket 之非阻塞 Server

    再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...

最新文章

  1. android启动流程之lk,Android系统之LK启动流程分析(一)
  2. PC软件/web网站/小程序/手机APP产品如何增加个人收款接口
  3. 开发者进阶之路 |UIBPlayer (视频播放)demo分享
  4. 【语音SBC算法】基于正交滤波器组的语音SBC算法设计与实现
  5. 导出怎么用_微信好友账号怎么导出?微信怎么备份通讯录?
  6. Codewars-Regex Password Validation(正则检验密码格式)
  7. Redis 常用配置参数
  8. 在linux中关于组的命令,linux 用户和组管理相关的命令
  9. JSP之【include】指令
  10. matlab函数建模例题,数学建模matlab上机实训题目答案
  11. B站视频下载(含bv快速变回av)
  12. oracle表同步 job,Oracle中通过Job实现定时同步两个数据表之间的数据
  13. 一不小心薅了「支付宝」的羊毛
  14. 推荐系统实践(八)UCG 利用ltf-idf方法
  15. Houdini地形创建
  16. Win7 的70个使用技巧
  17. win7下安装配置Tomcat 7.0
  18. mongoose 连接数据库
  19. 照片如何抠图去背景?图片如何变成透明底?
  20. [work] Ubuntu 常用快捷键总结

热门文章

  1. mysql 常用管理命令
  2. Docker Consul Fabio ASP.NET Core 2.0 微服务跨平台实践
  3. [译]理解Node.js事件驱动机制
  4. jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?
  5. 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
  6. IEEE写作模板获取
  7. Loaded runtime CuDNN library: 7103 (compatibility version 7100) but source was compiled with 7005 ..
  8. A - 还是畅通工程(最小生成树)
  9. 读 zepto 源码之工具函数
  10. 跟我学Android之二 第一个程序