读书笔记:《C++程序设计教程(修订版)------设计思想与实现 》 [钱能,清华大学出版社]
来源:互联网 发布:win7系统优化提速 编辑:程序博客网 时间:2024/05/20 05:28
第一部分 C++过程化语言基础
第1章 C++入门
1.6 最简单的程序
C++的程序结构由注释、编译预处理和程序主体组成。
C++忽略注释,并把每个注释都视为一个空格。
每个以符号#开头的行,称为编译预处理行。
每一个C++程序都必须有一个main( )函数,且只能有一个。
C++程序中的名字是大小写敏感的。
描述一个函数所执行算法的过程称之为函数定义。
C++中,一个变量必须在声明之后才能使用,定义变量,意味着给变量分配内存空间。
1.7 函数
函数定义由函数头和函数体构成,函数头又由返回类型、函数名和函数参数构成。
函数定义中的参数成为形式参数,调用函数时实际传递的值称为实际参数。
函数定义包含函数声明。
第2章 基本数据类型与输入输出
2.3 变量定义
4. typedef
用typedef可以为一个已有的类型名提供一个同义词。
typedef没有实际地定义一个新的数据类型,在建立一个typedef类型是没有分配内存空间,在程序中仅起到帮助理解的作用。
typedef double profit; //定义double的同义词typedef int INT,integer; //定义int的两个同义词
2.4 字面量
1. 整形数
整形数可用3种表示方式:十进制整数(有正负之分),八进制整数(以0开头,无正负之分),十六进制整数(以0X或0x开头,无正负之分)。
2. 实型数
实型数分为单精度(float)、双精度(double)和长双精度(long double)3类。
34.5 //float型34.5 //double型(默认表示)34.5l //long double型
3. 字符
字符是用单引号括起来的一个字符。
将一个字符赋值给字符变量,实际上并不是把该字符本身放到内存单元,而是将该字符的相应ASCII码存储,即以整数表示。所以C++中字符数据和整形数据之间可以互相赋值,只要注意其表示的范围合理。
int a='b'; //ok: 给一个整型变量附一个字符值char c=97; //ok: 给一个字符变量附一个整型值cout<<a<<endl;cout<<c<<endl;其结果为:
98
a
4. 字符串
字符串是由一对双引号括起来的字符序列。
在C++中字符串总是以\0结束。
5. 枚举符
enum COLOR{RED,BLUE,GREEN,WHITE,BLACK};COLOR是枚举类型名,不是变量名,不占内存空间。
如果没有专门指定,第1个符号常量的枚举值就是0,其他枚举值依次为1往上加。
不能用整数值赋给枚举变量。
COLOR paint=GREEN; //定义了枚举类型后,可以定义该枚举类型的变量,变量的取值只能取枚举类型定义时规定的值。paint=200; //error
2.5 常量
定义成const后的常量,定义时必须初始化,程序中对其只能读不能修改。
const float pi=3.141592653; //ok: 由于有效位的限制,最后3位不起作用const float pi;pi=3.1415926; //errorc++编程中,常量定义都用const,不用#define。
#define PI 3.1415926 //由于它不是C++语句,所以行末不用分号。PI在编译预处理完成后全部被字串3.1415926所替代。
第3章 表达式和语句
第4章 过程化语句
continue语句是终止本次循环,继续循环判断。break语句是终止整个循环,不再进行条件判断。第5章 函数
5.1 函数概述
C++不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。
5.2 函数原型
函数的返回值也称函数值。返回的不是函数本身,而是一个值。
5.4 函数调用机制
栈工作原理:先进后出,后进先出(子弹)。栈是有限的资源,每次调用一个函数,剩余的栈空间就会减少。
5.5 静态局部变量
局部变量前加上static关键字就成了静态局部变量。静态局部变量始终存放在内存的全局数据区,不因为函数的结束而消失,直到程序运行结束。
5.8 重载函数
重载函数至少在参数个数、参数类型或参数顺序上有所不同。
第6章 程序结构
6.1 外部存储类型
extern
带extern的变量说明是变量声明,不是变量定义。
6.2 静态存储类型
在全局变量前加一个static,称之为全局静态变量,该变量值在这个源文件中可用,对组成该程序的其它源文件是无效的。
默认的函数声明或定义是extern的。
第7章 数组
7.1 数组定义
类型说明符 数组名[常量表达式];
数组定义中的下标必须确定。
int size=50;int main(){int array[size]; //error//...}
const int size=50;const int n=size*sizeof(int);int main(){int array[size]; //okchar charray[n]; //ok//...}
7.3 初始化数组
初始化数组的值不能通过跳过逗号的方式来省略。
第8章 指针
8.1 指针概念
指针变量的定义语句,由数据类型后跟星号,再跟随指针变量名组成。
在指针定义中,一个*只能表示一个指针。
用&操作符可以获取变量的地址,指针变量用于存放地址。
int * iPtr;int iCount=18;iPtr=&iCount; //将地址赋给存放地址的变量(指针)*的三种用法:
A.乘法
B.定义指针(*放在指针定义中时称指针定义符)
C.间接引用(*放在可执行语句的指针之前,称之为间接引用操作符)
间接引用指针时,可获得由该指针指向的变量内容。
#include<iostream>using namespace std;int main(){int * iPtr;int iCount=18;iPtr=&iCount;cout<<*iPtr<<endl; //间接引用指针}运行结果为:
18
间接引用的指针既可用于右值,也可用于左值。
指针在使用前,要进行初始化。
8.4 堆内存分配
堆(heap)是区别于栈区、全局数据区和代码去的另一个内存区域。堆允许程序在运行时(而不是在编译时),申请某个大小的内存空间。
8.7 字符指针
3. 字符指针
字符串是地址
输出字符指针就是输出字符串
输出字符指针的间接引用,就是输出单个字符
4. 字符串比较
两个字符串比较是地址的比较
两个数组名比较是地址的比较
第9章 引用
9.1 引用的概念
引用是个别名。引用运算符&只在声明的时候使用,放在类型名后面。引用只有声明没有定义,在声明时必须初始化,不占存储空间。
int intOne;int& rInt = intOne;任何其他&的使用都是地址操作符,例如:
int * ip=&intOne;cout<<&ip;
9.3 什么能被引用
void& a=3; //error
int a[10];int& ra[10]=a; //error
int a;int& ra=a;int& *p=&ra; //error 企图定义一个引用的指针
int& ra=int; //error
int& ri=NULL; //毫无意义
第10章 结构
10.1 结构概述
结构是用户自定义的新数据类型。
声明结构在所有函数之外,位于main( )函数之前。
声明一个结构并不分配内存,内存分配发生在定义这个新数据类型的变量中。
通过定义相应结构变量,分配了空间,就可以用点操作符.来访问结构中的成员。
10.2 结构与指针
结构变量的地址是结构第一个成员地址。可以将结构变量的地址赋给结构指针,结构指针通过箭头操作符->来访问结构中的成员。
10.4 传递结构参数
当结构很大时,引用传递的优越性才真正开始体现。在编程经验上,除非是小结构,一般很少按值传递。
10.6 链表结构
结构可以嵌套,及结构中可以包含结构成员。
结构成员不能是自身的结构变量,但可以用自身结构指针作为成员。
通过含有一个自身结构的指针,我们可以实现随机分布的结构变量的遍历。
struct List{char name[20];List* pH; //List结构指针作为其成员List m; //error};
第二部分 面向对象程序设计
第11章 类
11.1 从结构到类
C++的类(class)定义中默认情况下的成员是private的,而结构(struct)定义中默认情况下的成员是public的。
11.3 定义成员函数
: :叫做作用域区分符,指明一个函数或一个数据属于哪个类。: :可以不跟类名,表示全局数据或全局函数。
在类定义的成员函数一般规模都比较小,而且特别的switch语句不允许使用。它们一般为内联函数。
第12章 构造函数
12.3 构造函数的使用
C++规定与类同名的成员函数是构造函数,在该类的对象创建时自动被调用。用于创建对象和为其初始化。
构造函数没有返回类型,函数体中也不允许返回值,但可以有无值的返回语句return;
12.4 析构函数
析构函数在构造函数名前加上一个逻辑非运算符~,表示“逆构造函数”。析构函数没有返回类型,没有参数,不能随意调用,也没有重载。只是在类对象生命期结束的时候,由系统自动调用。
......
构造函数可以带参数。
构造函数可以重载。
C++提供的默认构造函数,仅负责创建对象,而不做任何初始化工作。
12.9 构造类成员(看P.283)
在构造函数头后面的冒号:表示后面要对类的数据成员的构造函数进行调用。
冒号语法使得常量数据成员和引用数据成员的初始化成为可能。第13章 面向对象程序设计
在构造函数头后面的冒号:表示后面要对类的数据成员的构造函数进行调用。
冒号语法使得常量数据成员和引用数据成员的初始化成为可能。第14章 堆与拷贝构造函数
14.1 关于堆
C++程序的内存格局通常分为四个区:
(1)全局数据区(data area)存放全局变量、静态数据、常量;
(2)代码区(code area)存放所有类成员函数和非成员函数代码;
第15章 静态成员与友元
15.2 静态成员的使用
静态成员用static声明。
静态数据成员在类声明外分配空间和初始化。
使用静态数据成员,实际上可以消灭全局变量。
15.4 静态成员函数
静态成员函数没有this指针。
15.6 友元的使用
在类里声明一个普通函数,标上关键字friend,就成了该类的友元。该函数可以直接访问一个类的保护或私有数据成员。
第16章 继承
16.2 继承的工作方式
子类 : 父类。
......虚函数,在成员函数前加virtual关键字。
16.13 抽象类
抽象类是一个不能有实例对象的类,唯一用途是被继承。
一个抽象类至少具有一个纯虚函数。virtual void Withdrawal(float amount)=0;//纯虚函数
16.14 由抽象类派生具体类
第17章 多重继承
17.3 虚拟继承
子类 : virtual父类。
第18章 运算符重载
18.2 如何重载运算符
返回类型 operator 运算符号(参数说明);
class A{ };int operator+(A&, A&); //两个A类对象参加运算,返回int型值
第19章 I/O流
第20章 模板
第21章 异常处理
(1)定义异常(try语句块)。将那些有可能产生错误的语句框定在try块中;
(2)定义异常处理(catch语句块)。将异常处理的语句放在catch块中,以便异常被传递过来时就处理它;
- 读书笔记:《C++程序设计教程(修订版)------设计思想与实现 》 [钱能,清华大学出版社]
- C++基本语法1--C++程序设计教程/钱能主编--清华大学出版社
- C++基本语法2--C++程序设计教程/钱能主编--清华大学出版社
- C++基本语法3--C++程序设计教程/钱能主编--清华大学出版社
- C++基本语法4--C++程序设计教程/钱能主编--清华大学出版社
- C++基本语法5--C++程序设计教程/钱能主编--清华大学出版社
- 清华大学出版社 数据结构(C语言版)的实现
- 《C++程序设计教程》 钱能
- 《Linux/Unix设计思想》读书笔记与感想
- 80X86汇编语言程序设计教程 杨季文等编著 清华大学出版社
- 钱能C++程序设计教程第一版总结
- redis设计与实现读书笔记(第一章)
- LINUX UNIX设计思想读书笔记(略读)
- (压位)高精度思想教程 与 代码实现
- 《Microsoft .NET框架程序设计(修订版)》
- 书评《Microsoft .NET框架程序设计(修订版)》
- 《Redis设计与实现》读书笔记
- 《Redis设计与实现》读书笔记
- c/c++ 缓冲区溢出
- Linux pgrep(查询实例是否存在)与pkill的使用
- FatFS文件系统详解-附移植建议
- to_date
- 取得Class名
- 读书笔记:《C++程序设计教程(修订版)------设计思想与实现 》 [钱能,清华大学出版社]
- SETTIMER的使用问题
- Orcle get/@ 命令的默认路径
- sockaddr_in , sockaddr , in_addr区别
- linux内核设计与实现(第十一章)----定时器和时间管理
- 12个git实战建议和技巧
- WaitForSingleObject的用法
- dll的多进程多线程安全的几种策略
- no space left on device