C++读书笔记.docx
《C++读书笔记.docx》由会员分享,可在线阅读,更多相关《C++读书笔记.docx(14页珍藏版)》请在冰点文库上搜索。
![C++读书笔记.docx](https://file1.bingdoc.com/fileroot1/2023-5/23/73ed8432-e277-4e80-9c75-cb4683be4fca/73ed8432-e277-4e80-9c75-cb4683be4fca1.gif)
C++读书笔记
第二章数据类型
●基本数据类型:
整型、字符型、实型(float、double)、逻辑型(bool)
●自定义数据类型
数组、指针*、引用&、空类型、结构、联合(union)、枚举(enum)、类
第7章函数
函数的重载
一个函数名可以对应多个功能的函数实现
●参数类型上不同的重载函数
●函数个数上的重载函数
函数的嵌套调用
内联和递归函数
●内联函数:
提高程序的执行效率
Inline函数名(参数表);//内联函数声明
Inline函数名(参数表)//内联函数定义
{……}
类结构中所有在类说明中定义的函数都是内联函数
●递归函数:
提高代码可读性
指调用一个函数的过程中出现直接的或间接的调用该函数自身
使用C++的系统函数
Iostream.h
Math.h
Ctype.h
String.h
Graph.h
第8章决定生存的权利——存储分类符
存储分类符和作用域
●分类符:
Auto自动类:
函数级和块级
Register寄存器类:
局部变量存放到CPU的通用寄存器charint
Static静态类
内部静态变量:
作用域同自动变量一样,但离开作用域值不变
外部静态变量:
文件级,可被当前文件所有函数调用,生存期为整个程序执行期间。
在所有函数体外定义外部静态变量用关键字static
Extern外部类:
程序级和文件级,全局变量
●作用域:
程序级
文件级
函数级
块级
各种各样分类符的作用域及其生存期
内部函数和外部函数
第9章C++中的“大口袋”——数组
第10章让人迷惑的指针
地址
姓名
信息
1208
张三
2202
2202
李四
35
“房间号2202”是李四“变量”的指针。
如果有一个变量专门用来存放另一变量的地址(即指针)的,则称其为“指针变量”。
指针的类型是由其所指向的变量名的类型决定的。
指针变量的声明
数据类型*指针名
Int*pn,*pi;
float*pl;
获得地址并对指针变量进行初始化
&变量名
int*pa=&a;
int*pb=&b[3];
特殊的值——NULL
int*p=NULL;
C++是区分大小写的,NULL和null是不同的。
指针的使用
“*”为指针的间接访问操作符。
其作用是间接地访问指针指向的变量或者内存空间的数据。
*:
取内容
&:
取地址
*指针变量名
int*pn=&n;*pn和n等价了,*pn代表n。
指向指针变量的指针
inti=0;
int*p=&i;
int**pp=&p;
数组、字符串和指针
array[i]
*(array+i)
*(*(array+i)+j)
*(array[i]+j)
指针数组的声明:
数据类型*数组名【数组大小】;
常量指针与指针常量
●常量指针:
为了保证指针所指向的的数据之在使用指针间接访问时不被改变,相当于常量。
格式:
const数据类型*指针变量名
注意:
不能把常量的地址赋值给指针变量,否则也会产生编译错误。
●指针常量
指针本身是常量,即不能改变指针在定义以后指向的地址值。
格式:
数据类型*const指针常量名=&变量名;
int*constp=&i;
常量指针
保证通过指针访问的内存中的数据不能被修改
指针常量
保证指针本身不被修改
指针与函数
指针作为参数
同时由于指针是地址,所以调用函数时,系统是将实参的地址复制给对应的形参指针,使形参指针指向实参。
在被调用的函数中对形参指针指向的改变,将改变实参的值,同引用调用。
C++中灵活的空间——堆内存
动态分配内存
申请堆内存
new数据类型[表达式];
释放
delete[]指针;
第11章自己设计的数据类型——结构
结构的概念
结构类型的声明
struct结构名
{
成员列表
};
结构类型变量的定义
struct结构名变量名;
typedef原数据类型名新数据类型名
typedefstuctstudentSTUDENT;
对结构变量的赋值
STUDENTsd;
sd={800123,”LiMin”,’M’,16,89.5}
结构成员的访问
结构变量名.结构成员名
sd.id
特殊的自定义类型——枚举类型
定义:
enum枚举类型名{枚举值类列表}
枚举变量声明:
枚举类型名变量名;
结构类型的数组和指针
结构数组的声明:
struct结构名结构数组名;
structstudentsdArray[3];
访问:
sdArray[2].name;
结构指针:
struct结构名*指针名;
STUDENT*p=NULL;
STUDENTsd={800123,”LiMin”,”M”,16,89.5};
p=&sd;
p->age=18;
结构与函数
结构作为参数
1、
传数值调用形参的改变不影响实参
2、传地址调用将影响实参
3、引用调用
结构作为返回值
结构中的结构
指针变量作为结构成员
结构变量作为结构成员
第12章C++的预处理程序指令
C++中的预处理功能主要是指可以在C++源程序中包含各种编译命令,用这些编译命令在代码编译前执行,所以这些命令被称为预处理命令。
#include系统文件建议使用
#include“filename”自定义文件建议使用
这两种形式的差别在于与处理器查找要包含的文件的路径不同。
Ø文件包含命令
Ø条件编译命令
Ø宏定义命令
简单的字符串替换
宏定义
#define宏名字符串
取消宏定义#undef宏名或者宏函数名
定义宏函数:
#define宏函数名(参数表)字符串
#defineADD(x,y)x+y
条件编译
原文件中的某些编译代码要在一定的条件下才参与编译,如果条件不满足,则不编译。
ifdef-else-endif格式
#ifdef标识符
代码段1
#else
代码段2
#endif
#ifdef标识符
代码段1
#endif
ifndef-else-endif
#ifndef标识符
代码段1
#else
代码段2
#endif
if-else-endif
#if常量表达式1
代码段1
#elif常量表达式2
代码段2
……
#elif常量表达式n
代码段n
#else
代码段n+1
#endif
头文件的编写
避免重复定义,在type.h中定义
#ifndef_TYPE_H_
#define_TYPE_H_
//TYPE.h中的代码段
#enddef
_TYPE_H_已经定义过再次包含type.h时的代码段不会被编译。
C++的新特性
第13章类
对象=算法+数据结构
程序=对象+对象+对象……
类的声明
头文件干什么
类的实现
源文件怎么干
类的声明
class类名
{
成员函数的声明
数据成员的声明
};
一般情况下,采用C字母开头的字符串作为类名
对象的声明
类名对象名;
类名对象名1,对象名2……,对象名n;
对象成员的访问
对象名.数据成员名
对象名成员函数名(参数表)
指向对象的指针
对象指针名->数据成员名
对象指针名->成员函数名(参数表)
CSaving*pSaving;//CSaving类中的对象指针pSaving
pSaving=&saving;//对象指针pSaving指向saving对象
pSaving->accordingld;//指针pSaving所指向的对象中的成员。
类的数据成员
声明
class类名
{
数据类型数据成员名;
};
类的成员函数
声明
class类名
{
数据类型成员函数名;
}
成员函数的实现
成员函数的重载
给成员函数的参数设置默认值
类对成员的访问控制
public
可以由程序中任意函数访问
protect
只能被基类的成员函数和友元以及派生类的成员函数和友元访问
private
成员隐式的声明只能被基类的成员函数和友元函数访问
第14章类中特殊的函数与常类型
对象的创造者——构造函数
对象的毁灭者——析构函数
类中的常类型类名const对象名
const类名对象名
第15章类与对象的各种指针和引用
对象指针作为函数的参数
对象引用作为函数的参数
对象数组
子对象与堆对象
如果一个类中的成员是另一个类的对象时,称这个对象是子对象。
堆对象:
可以在程序运行时,随时创建和删除,满足实时的程序要求。
堆内存
创建:
new类名(参数名);
new类名[数组大小];
学习删除堆对象并综合练习堆对象的创建、删除
delete指向堆对象的对象指针;
delete[]指向堆对象数组的对象指针;
第16章共有结点、友元与操作符
类是生成对象的模板,但每个由类创建的对象都有独立存储空间,所以对象的数据成员的值各不相同。
类的所有对象在类的范围内共享一些成员,这些成员不属于任何对象,而是属于类的,成为类的共有结点。
静态数据成员
class类名
{
static类型数据成员名;
};
静态成员的初始化只能在类体外
数据类型类名:
:
静态数据成员名=数据值;
静态成员函数声明
class类名
{
public:
static数据类型函数名(参数表);
};
调用
类名:
:
静态成员函数名(参数表);
this指针
友元函数的声明
class类名
{
public:
friend函数名(参数表);//友元函数,定义在类体外
};
对友元函数的调用是直接调用的
友元函数中能访问类的私有成员
如果任务与单个对象密切相关,就使用成员函数。
如果任务涉及多个对象,而且对象均匀的使用,就使用非成员函数。
友元类
一个类作为另一个类的友元,这个类的所有成员函数都是另一各类的友元函数
破坏了类的封装性和隐藏性,不推荐使用。
多功能的操作符重载操作符
class类名
{
数据类型operator操作符(参数表);
};
文件输入输出对象的使用
共同体
union共同体名
{
数据类型数据名
数据类型数据名
}变量名;