成员函数的声明必须在类的内部,定义则既可以在类的内部,也可以在类的外部。
作为接口组成部分的非成员函数,它们的定义和声明都在类的外部。

类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或函数成为它的友元。如果类想把一个函数作为它的友元,只需要增加一条以friend关键字开始的函数声明语句即可。

友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限。友元不是类的成员,不受所在区域访问控制级别的约束。一般来说,最好在类定义开始或结束前的位置集中声明友元。
如果一个类指定了友元类,声明形式friend class 类名,则友元类的成员函数可以访问此类包括非公有成员在内的所有成员。
友元关系不存在传递性。

可变数据成员,是在变量的声明中加入mutable关键字,任何成员函数,包括const成员函数,都可以修改可变数据成员的值。

含有指针数据成员的类一般不宜使用默认的拷贝和赋值操作,如果类的数据成员都是内置类型的,则直接使用类对象执行拷贝和赋值操作是可以的。

要想把类的成员函数定义成内联函数,有几种不同的途径。第一种是直接把函数定义放在类的内部,第二种是把函数定义放在类的外部,并且在定义之前显示地指定inline。

类允许包含指向它自身类型的引用或指针。

如果类的数据成员是const、引用,或者属于某种未提供默认构造函数的类类型,我们必须通过构造函数初始值列表为这些成员提供初值,示例如下:
类名(参数列表...):i(ii),ci(ii),ri(i){}
在很多类中,初始化和赋值的区别事关底层效率问题:前者直接初始化数据成员,后者则先初始化再赋值。除了效率问题外更重要的是,一些数据成员必须被初始化。
成员的初始化顺序与它们在类定义中的出现顺序一致:第一个成员先被初始化,然后第二个,以此类推。构造函数初始值列表中初始值的前后位置关系不会影响实际的初始化顺序。

如果一个构造函数为所有参数都提供了默认实参,则它实际上也定义了默认构造函数。

将构造函数声明为explicit可抑制构造函数的隐式转换。关键字explicit只对一个实参的构造函数有效,需要多个实参的构造函数不能用于执行隐式转换,所以无需将这些构造函数指定为explicit。只能在类内声明构造函数时使用explicit关键字,在类外部定义时不应加explicit关键字。

聚合类使得用户可以直接访问其成员,并且具有特殊的初始化语法形式。当一个类满足如下条件时,我们说它是聚合的:

  • 所有成员都是public的
  • 没有定义任何构造函数
  • 没有类内初始值
  • 没有基类也没有虚函数

除了静态常量成员之外,其他静态成员不能在类的内部初始化。

C++ primer 第7章 类相关推荐

  1. C++ primer 第7章 类 思维导图

  2. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案

    理论讲解请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数) 目录 7.1 定义抽象数据类型习题答案 7.4&7.5 7.6&7.7 7. ...

  3. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)

    习题答案请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数)习题答案 目录 7.1 类讲解(成员函数.非成员函数.构造函数) 成员函数 this cons ...

  4. C++ Primer(第五版)第七章 类 部分答案

    第七章 类 练习7.2 练习7.3 练习7.4 练习7.6 练习7.7 练习7.9 练习7.14.7.15.7.22 练习7.23.7.24.7.26 练习7.27 练习7.2 曾在 2.6.2 节的 ...

  5. c++ primer 第14章 习题解答

    14.1节 14.1答 不同点: 重载操作符必须具有至少一个class或枚举类型的操作数. 重载操作符不保证操作数的求值顺序,例如对&&和| | 的重载版本不再具有"短路求值 ...

  6. C++术语 【from C++ Primer 第1章 快速入门】

    C++术语 [from C++ Primer 第1章 快速入门] argument(实参) 传递给被调用函数的值. block(块) 花括号括起来的语句序列. buffer(缓冲区) 一段用来存放数据 ...

  7. C++Primer 第15章 OOP

    C++Primer 第15章 OOP #include<iostream> class Base {public:virtual void fun1(int i = 0){std::cou ...

  8. C++Primer 第8章IO流

    C++Primer 第8章 IO流 写在前面 首先是main()处理命令行选项,后面会用到 IO类 iostream a.条件状态 b.输出缓冲 fstream a.fstream 特有的操作 b.使 ...

  9. C++Primer 第10章lambda表达式

    C++Primer 第10章lambda表达式 泛型编程 咱们继续高歌猛进,下面我给大家继续讲关于算法的故事. 我们知道标准库容器中定义的算法大多数独立在算法之外,通常这些算法是通用的.它们可以处理不 ...

最新文章

  1. 基于Redis的服务治理平台!
  2. javascript常用方法函数收集
  3. 【VS开发】【C++语言】reshuffle的容器实现算法random_shuffle()的使用
  4. java 常量池 和 堆 的关系_Java堆、栈和常量池以及相关String的详细讲解(经典中的经典)...
  5. iOS-----------关于组件化
  6. Druid Monitor监控JavaSE,杀cmd端口进程
  7. noip2017颓废记
  8. HDU 4707 Pet 邻接表实现
  9. Java 线程池学习
  10. 一次编译安装SENginx 的小经历.....
  11. wxpython列表控件listctrl设置某行颜色_改变ListCtrl某行的背景色或者字体颜色
  12. matlab 倒位序fft程序,FFT算法设计与实现
  13. Android 控件的各种方法介绍
  14. CS 61A Spring 2019 HW01 学习笔记
  15. SpringMVC:过滤器和拦截器的区别和实现原理
  16. APP开通支付宝支付 转账功能
  17. android翻盖手机双屏显示,使用双屏翻盖手机是一种怎样的体验?
  18. 初学者学习app2sd并且成功使用它的全过程
  19. arcgis把jpg转成栅格图像_土地利用JPG数据转栅格
  20. vs2015 或其他版本 一键卸载所有组件工具,彻底卸载干净

热门文章

  1. 微软认证及课程简写含义
  2. Hyper-V第1代虚拟机和第2代虚拟机特性对照表
  3. android 对话框白色样式,Android 对话框(Dialog)样式大全以及简单实现
  4. unity3d collider自动调整大小_自动网格组合建模工具Unity游戏素材资源
  5. ArrayList、HashMap、HashSet是线程不安全的,高并发下如何解决?
  6. 【HDU - 5777】domino(贪心)
  7. 【牛客 - 370 I 】Rinne Loves Xor(按位前缀和,异或)
  8. 【UVA - 11383】Claw Golden Tiger (二分图最优匹配,KM算法原理)
  9. 从零开始学视觉Transformer (10):目标检测DETR-1
  10. code vs 代码格式化排版_23行代码,教你用python实现百度翻译!(建议收藏)