C++ Primer 5 CH7 类
7.1 定义抽象数据类型
- 定义和声明成员函数的方式与普通函数差不多,成员函数的声明必须在类的内部,定义可以在类的内部或外部。作为接口组成部分的非成员函数的声明和定义都在类的外部。
- 定义在类内部的函数是隐式的 inline 函数。
- 当我们调用成员函数时,实际上是替某个对象调用它。成员函数通过 this 的隐式参数来访问调用它的那个对象。
- 任何对类成员的直接访问都被看作 this 的隐式引用。
- this 是一个常量指针,不允许改变 this 保存的地址。
- 使用 const 的成员函数被称作常量成员函数,const 的作用是修改隐式 this 的指针类型,使它变成指向常量的指针,因此常量成员函数不能改变调用它的对象的值。
- 编译器分两步处理类:首先编译成员的声明,然后才轮到成员函数体。因此,成员函数体可以任意使用类中的其他成员而无序在意成员出现的次序。
- 返回 this 对象:
return *this。 - 如果非成员函数是类接口的组成部分,则这些函数的声明应该与类在同一个头文件中。
- 构造函数的名字和类名相同,没有返回类型,可以重载。
- 构造函数不能声明为 const。
- 只有当类没有声明任何构造函数时,编译器才会自动的生成默认的构造函数。
- 默认构造函数:
Sales_data() = default; - 构造函数初始值列表:
Sales_data(const std::string &s) : bookNo(s) {}
- 当某个数据成员被构造函数初始值列表忽略时,它将以与合成默认构造函数相同的方式隐式初始化。
7.2 访问控制与封装
- 使用访问说明符加强类的封装性。
- public 定义类的接口,private 封装类的实现细节。
- class 与 struct 的唯一区别是默认的访问权限。如果我们使用 struct,定义在第一个访问说明符之前的成员是 public 的,如果我们使用 class,定义在第一个访问说明符之前的成员是 private 的。
- 类允许其他类或函数访问它的非公有成员,方法是令其他类或函数称为它的友元 friend。
- 友元声明只能出现在类的内部,但是出现的具体位置不限。
- 友元声明不是一个通常意义上的函数声明,因此需要在友元声明之外,专门对函数进行一次声明。
7.3 类的其他特性
- 类型成员:定义某种类型在类中的别名,存在访问限制。
- 用来定义类型的成员必须先定义后使用。
- 可以在类的内部用 inline 声明内联函数,也可以在类的外部用 inline 修饰函数的定义,不需在声明和定义的地方同时说明 inline,最好在定义的地方说明 inline。
- inline 成员函数应该与相应的类定义在同一个头文件中。
- 可变数据成员:mutable 关键字,值可以改变,即使它是 const 对象的成员。
- 一个 const 成员函数如果以引用的形式返回 *this,那么它的返回类型将是常量引用。
- 每个类定义了唯一的类型,对于两个类,即使它们的成员函数完全一样,也是两个不同的类型。
- 一旦一个类的名字出现后,它就被认为是声明过了,因此类允许包含指向它自身类型的引用或指针。
- 类可以把其他类定义成友元,也可以把其他类(之前已经定义过)的成员函数定义成友元。
- 友元关系不存在传递性。
- 如果一个类想把一组重载函数声明成它的友元,它需要对这组函数中的每一个分别声明。
- 友元本省不一定真的声明在当前作用域中,需要在类的外部提供声明使得函数可见。
7.4 类的作用域
7.5 构造函数再探
- 如果没有在构造函数的初始值列表中显式地初始化成员,则该成员将在构造函数体之前执行默认初始化。
- 如果成员是 const、引用或者属于某种未提供默认构造函数的类类型,我们必须通过构造函数初始化列表为这些成员提供初值。
- 初始值列表不限定初始化的具体执行顺序,成员的初始化顺序与它们在类定义中的出现顺序一样。
C++ Primer 5 CH7 类的更多相关文章
- C Primer Plus--C存储类、链接和内存管理之存储类(storage class)
目录 存储类 作用域 链接 存储时期 自动变量 寄存器变量 具有代码块作用域的静态变量 具有外部链接的静态变量 extern关键字 具有内部链接的静态变量 多文件 存储类 C为变量提供了5种不同的存储 ...
- C++ Primer 有感(类)
1.在类内部,声明成员函数时必需 的,而定义成员函数则是可选的.在类内部定义的函数默认为inline. 2.const成员函数不能改变其所操作的对象的数据成员.const必须同时出现在声明和定义中,若 ...
- C++ Primer 笔记——嵌套类 局部类
1.嵌套类是一个独立的类,与外层类基本没什么关系.特别的是,外层类的对象和嵌套类的对象是相互独立的.在嵌套类的对象中不包含任何外层类定义的成员,在外层类的对象中也不包含任何嵌套类定义的成员. 2.嵌套 ...
- C++ Primer 笔记——IO类
1.C++语言并未定义任何输入输出语句,取而代之,包含了一个全面的标准库来提供IO机制. 由上图能够知道,I/O操作的基类是ios_base,各个类的用途例如以下: <iostream> ...
- 【c++ primer, 5e】类的其他特性(卒)
1 - Class Members Revisited 2 - Functions That Return *this 3 - Class Types 4 - Friendship Revisited ...
- C Primer Plus--C存储类、链接和内存管理之动态分配内存及类型限定词
目录 存储类说明符 存储类和函数 动态分配内存 malloc函数 free函数 calloc函数 动态分配内存的缺点 C类型限定关键字 constant定义全局常量 volatile关键字 restr ...
- C++ Primer笔记
C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...
- C++ 派生类到基类转换的可访问性
今天看c++ primer关于派生类到基类转换的可访问性,看的很晕,看了下面的文章恍然大悟: http://www.2cto.com/kf/201403/283389.html C++ primer第 ...
- 为什么static数据成员一定要在类外初始化?(转)
1.避免重复定义和初始化 <<c++ primer>>说在类外定义和初始化是保证static成员变量只被定义一次的好方法. 但,为什么static const int就可以在类 ...
随机推荐
- ZooKeeper配额
ZooKeeper可以在znode上设置配额限制.如果超出了配置限制,ZooKeeper将会在log日志中打印WARN日志.如果超出配额限制,并不会停止行为操作. ZooKeeper的配额是存储在/z ...
- url传参后获取参数
当我们通过url传参跳转到其他页面,如: http://www.xxx.com/content.html?id=217&name=txf&phone=15829087165 在跳转后的 ...
- win8命令行
Win8运行命令.快捷键大全合集 目前看来,Win8还不错,好的产品就是能在短时间改变你使用习惯的产品,首先来给大家讲下windows8 运行命令在哪?其实你可以用Win+R或者你用 WIN+Q再在A ...
- 新手学js的效果图1---( 淘宝等商城货物查看特效)
本人结合之前所学一起写了,多个特效,只是新手自己瞎鼓捣的,思路清晰,具体实现的货物放大镜等,替换当中的img地址就可以查看特效 <!DOCTYPE html> <html lang= ...
- iOS使用StroryBoard页面跳转及传值
之前在网上iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思想 ...
- angular : ng-animate : ng-show 原理,详解
这是我第一次写博客,请大家多多指教^^ 拷贝试试 <!DOCTYPE html> <html> <head> <meta http-equiv="C ...
- FFmpeg入门,简单播放器
一个偶然的机缘,好像要做直播相关的项目 为了筹备,前期做一些只是储备,于是开始学习ffmpeg 这是学习的第一课 做一个简单的播放器,播放视频画面帧 思路是,将视频文件解码,得到帧,然后使用定时器,1 ...
- Alamofire源码解读系列(三)之通知处理(Notification)
本篇讲解swift中通知的用法 前言 通知作为传递事件和数据的载体,在使用中是不受限制的.由于忘记移除某个通知的监听,会造成很多潜在的问题,这些问题在测试中是很难被发现的.但这不是我们这篇文章探讨的主 ...
- CSS揭秘 技巧(五):条纹背景
条纹背景 https://github.com/FannieGirl/ifannie/问题:条纹背景 在设觉设计中无处不在,我们真的可以用css 创建图案吗? 这一章相对还是比较复杂的哦!一起get. ...
- UVa1587 盒子
前言 第一次刷题,ac的感觉真的很棒! 题目 题目 大意是说,输入6个面,判断是否是个长方体. 思路 根据长方体的特质来判断,比如说6个面中3个面是相互对应的,只有3条不同的边等等. 我就知道我肯定会 ...