读书笔记之:C++Primer 第4版(ch12-14)
2012-02-29 13:15
387 查看
第12章 类
1. 构造函数
类的构造函数一般使用一个初始化列表来初始化对象的数据成员。
2. 成员函数
在类内部声明成员函数是必须的,而定义成员函数则是可选的。在类内部定义的函数默认为inline。而在类外部定义的成员函数必须指明它们是在类的作用域内。
成员函数有一个附加的隐含实参,将函数绑定到调用函数的对象。这个隐含的实参其实是this指针。对像的this指针并不是对象本身的组成部分,它不占对象的内存空间,在每次非static成员函数调用对象的时候,this指针作为隐藏的第一个参数由编译器传递给对象。
将关键字const 加在形参表之后,就可以将成员函数声明为常量:
如:
double avg_price() const;
const成员不能改变其所操作的对象的数据成员。const必须同时出现在声明和定义中,若只出现在一处,就会出现一个编译时错误。
3. 数据抽象与封装
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/7a954cf196c96ee697f969202e8d760e.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/f1b80639dbe60264f65dded0f0422cc7.png)
4. 类的声明与定义
类的定义放在头文件件中是一个很好的做法。
可以声明一个类而不定义它:
如:class Screen;
这个声明也称为前向声明,在声明之后定义之前,这个类是一个不完全类型,即已知类型却不知道包含哪些成员。
5. 类对象
定义类是定义了一种新的类型,定义了类型之后就可以定义该类型的对象。定义对象的时候要为对象分配存储空间,但定义类型的时候是不进行存储分配的。
6. 类成员的显示初始化
对于没有定义构造函数并且其全体数据成员均是public的类可以采用与初始数组元素相同的方式初始化其成员。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/3e46669ab469f76f9112852525065ee7.png)
这个地方所说的其实就是struct。在C++中struct和class一样都是定义一个类。在C++中允许这种形式的初始化其实就是为了对C程序实现兼容。
因为在C中可以对struct进行显示的初始化。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/f4c0a779cab4afb2845b9757f2b5fec4.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/f88dbf922fab1c85aea37b799024f167.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/d8b63cbb66f82e70693efb895a8fa333.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/b9c4793af0deaabd6c66e3c58e1066b5.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/e5b4ea968447688ba9ffecbe7dfda19b.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/7a8b3ce9cf8bd08842344d6b43e8c7be.png)
构造函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/953d1aec250f6ccb4b41a7abd02b9d19.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/75c3b866da3f070fa5a9b9d393e8c5fe.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/1ced8ddaeeeffb4b04cef39375672618.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/70c16ebee77c8ac93981168a04847dd2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/6fc409b32eac0cfbcd40041233d75053.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/ae9263cf119aa83f343f632a31014a84.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/1f80980a989c0a0566230d0ec7aafc0d.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/dde79c547514303e5e5cffdbcad6d012.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/040d24facb0ecfa5241cab0059a9b521.png)
友元
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/6a863dbb527847c2c383c4dc0bef8894.png)
Static成员变量和成员函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/6de11d9ea587685999cb14ef80db4683.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/c56068258e37cb34b67d6a9de66fcd91.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/fc418dea51abccfd766cc1a5f09d44a1.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/32b709b868b653666ab85c5654d23ea8.png)
第13章 复制控制
每种类型,无论是内置类型还是类类型,都对该类型对象的一组操作的含义进行了定义。每种类型还定义了创建该类型的对象时会发生什么——构造函数定义了该类 型对象的初> 始化。类型还能控制复制、赋值或撤销该类型的对象时会发生什么——类通过特殊的成员函数:复制构造函数、赋值操作符和析构函数类控制这些行为。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/b4d4df68b559dcd549901a18a742abb4.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/fcd683bc9e5190464f73878a485c384c.png)
复制构造函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/33f265fed3fb38d45f996298d8488c86.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/a51b08c3df24788ece7cd95254355323.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/5cd2e96c710a74a415bf5580eb5453e8.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/bd135aaac85342f1c093f8ab747997a4.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/f0cd666020e21f1777717df89658d6fc.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/fd2a4fd99a6987764b54af7d09d00943.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/09d5a71bf1cd402f120bbfeb6077eb09.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/6a73818c4a0c3515ec354c49ab4dc449.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/93b5a8b81304b91c8c91b51ff8c02424.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/72c2dbfb1652bb0da675045c7b1f1dcb.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/0572377477ce19320bc23015cc8d8001.png)
赋值操作
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/2e8adfed06db2b277b2e68839d1e5a73.png)
析构函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/7fd9ba9088082d6e42a69994444e2c07.png)
第14章 重载操作符与转换
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/2e525a2df6ed6be39b4cb9301b1ba3a2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/56dcafee31413dd0f9225c4930ec79b2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/78b85d278ba5320191646f68069bac8c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/52abb465a229eee0a149536e10bbf3b1.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/4e373ce9c31166d8ace22974c109c0bf.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/a518b0ec392cb265394a81f5b744b341.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/93e25467fc1829ab4985e5c4ee89104e.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/54c62b6a74542df027190affe43681a7.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/b8f48d84dc16ffcf3db11d4b601b5578.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/72b4dac72c1394e5c8d7ba7cc0f1be44.png)
1. 构造函数
类的构造函数一般使用一个初始化列表来初始化对象的数据成员。
2. 成员函数
在类内部声明成员函数是必须的,而定义成员函数则是可选的。在类内部定义的函数默认为inline。而在类外部定义的成员函数必须指明它们是在类的作用域内。
成员函数有一个附加的隐含实参,将函数绑定到调用函数的对象。这个隐含的实参其实是this指针。对像的this指针并不是对象本身的组成部分,它不占对象的内存空间,在每次非static成员函数调用对象的时候,this指针作为隐藏的第一个参数由编译器传递给对象。
将关键字const 加在形参表之后,就可以将成员函数声明为常量:
如:
double avg_price() const;
const成员不能改变其所操作的对象的数据成员。const必须同时出现在声明和定义中,若只出现在一处,就会出现一个编译时错误。
3. 数据抽象与封装
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/7a954cf196c96ee697f969202e8d760e.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/f1b80639dbe60264f65dded0f0422cc7.png)
4. 类的声明与定义
类的定义放在头文件件中是一个很好的做法。
可以声明一个类而不定义它:
如:class Screen;
这个声明也称为前向声明,在声明之后定义之前,这个类是一个不完全类型,即已知类型却不知道包含哪些成员。
5. 类对象
定义类是定义了一种新的类型,定义了类型之后就可以定义该类型的对象。定义对象的时候要为对象分配存储空间,但定义类型的时候是不进行存储分配的。
6. 类成员的显示初始化
对于没有定义构造函数并且其全体数据成员均是public的类可以采用与初始数组元素相同的方式初始化其成员。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/3e46669ab469f76f9112852525065ee7.png)
这个地方所说的其实就是struct。在C++中struct和class一样都是定义一个类。在C++中允许这种形式的初始化其实就是为了对C程序实现兼容。
因为在C中可以对struct进行显示的初始化。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/f4c0a779cab4afb2845b9757f2b5fec4.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/f88dbf922fab1c85aea37b799024f167.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/d8b63cbb66f82e70693efb895a8fa333.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/b9c4793af0deaabd6c66e3c58e1066b5.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/e5b4ea968447688ba9ffecbe7dfda19b.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/7a8b3ce9cf8bd08842344d6b43e8c7be.png)
构造函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/953d1aec250f6ccb4b41a7abd02b9d19.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/75c3b866da3f070fa5a9b9d393e8c5fe.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/1ced8ddaeeeffb4b04cef39375672618.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/70c16ebee77c8ac93981168a04847dd2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/6fc409b32eac0cfbcd40041233d75053.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/ae9263cf119aa83f343f632a31014a84.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/1f80980a989c0a0566230d0ec7aafc0d.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/dde79c547514303e5e5cffdbcad6d012.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/040d24facb0ecfa5241cab0059a9b521.png)
友元
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/6a863dbb527847c2c383c4dc0bef8894.png)
Static成员变量和成员函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/6de11d9ea587685999cb14ef80db4683.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/c56068258e37cb34b67d6a9de66fcd91.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/fc418dea51abccfd766cc1a5f09d44a1.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/32b709b868b653666ab85c5654d23ea8.png)
第13章 复制控制
每种类型,无论是内置类型还是类类型,都对该类型对象的一组操作的含义进行了定义。每种类型还定义了创建该类型的对象时会发生什么——构造函数定义了该类 型对象的初> 始化。类型还能控制复制、赋值或撤销该类型的对象时会发生什么——类通过特殊的成员函数:复制构造函数、赋值操作符和析构函数类控制这些行为。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/b4d4df68b559dcd549901a18a742abb4.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/fcd683bc9e5190464f73878a485c384c.png)
复制构造函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/33f265fed3fb38d45f996298d8488c86.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/a51b08c3df24788ece7cd95254355323.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/5cd2e96c710a74a415bf5580eb5453e8.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/bd135aaac85342f1c093f8ab747997a4.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/f0cd666020e21f1777717df89658d6fc.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/fd2a4fd99a6987764b54af7d09d00943.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/09d5a71bf1cd402f120bbfeb6077eb09.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/6a73818c4a0c3515ec354c49ab4dc449.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/93b5a8b81304b91c8c91b51ff8c02424.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/72c2dbfb1652bb0da675045c7b1f1dcb.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/0572377477ce19320bc23015cc8d8001.png)
赋值操作
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/2e8adfed06db2b277b2e68839d1e5a73.png)
析构函数
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/7fd9ba9088082d6e42a69994444e2c07.png)
第14章 重载操作符与转换
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/2e525a2df6ed6be39b4cb9301b1ba3a2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/56dcafee31413dd0f9225c4930ec79b2.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/78b85d278ba5320191646f68069bac8c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/52abb465a229eee0a149536e10bbf3b1.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/4e373ce9c31166d8ace22974c109c0bf.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/a518b0ec392cb265394a81f5b744b341.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/93e25467fc1829ab4985e5c4ee89104e.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/54c62b6a74542df027190affe43681a7.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/b8f48d84dc16ffcf3db11d4b601b5578.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/72b4dac72c1394e5c8d7ba7cc0f1be44.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/14/c2fbf7919d22dadf6063648a2552614f.png)
相关文章推荐
- 读书笔记之:C++ Primer (第4版)及习题(ch12-ch18)
- 读书笔记之:C++Primer 第4版(ch1-11)
- 读书笔记之:C++ Primer 第4版(ch15-18)
- 设计模式-读书笔记-10/14
- C++文本查询程序 定义类管理数据 用引用共享数据 不用智能指针 C++Primer练习12.27
- 10 12 14 匆忙
- 《C++Primer》读书笔记(11)
- 读书笔记: 博弈论导论 - 12 - 不完整信息的静态博弈 贝叶斯博弈
- 《Windows核心编程》读书笔记(14) 第19章 DLL基础
- effective C++ 读书笔记 条款14 以对象管理资源
- Windows Via C/C++ 读书笔记 12 Heap(堆)
- 第05章 数组 14 练习 12
- 变量初始化规则 C++Primer 读书笔记
- 日志14-12-10
- 12-面向对象(static关键字-成员变量和静态变量的区别-数据共享 13-面向对象(static关键字-注意事项) 14-面向对象(static关键字-main函数解析 15-面向对象(stat
- 人件--读书笔记12
- 读书笔记之: 计算机网络(第4版)- 第6章 传输层
- iPhone开发入门系列1(iOS8+Swift版)天天打靶APP学习12-14
- 《C++捷径教程》读书笔记--Chapter 18--C++的I/O系统--12-15
- 《C++Primer》读书笔记——第3章 字符串、向量和数组