开学了,有C++面向对象编程课程,然觉学校教材并不足合胃口,遂循🚀意见,阅此经典。略记些许笔记,加深印象(记性不好)只记我没学过的
第一章 预备知识
问题不多,详细请自己阅读
第二章 开始学习C++
类介绍
类时用户定义的数据类型,要定义类,需要描述如何表示信息和可对数据执行哪些操作
类之于对象就像
类型之于变量
类描述一种数据类型的全部属性
对象是类的实例化
第三章 处理数据
内置的c++类型对象有基本类型和复合类型,当然程序还需要一种表示存储数据的方法
简单变量
程序要记录三个基本属性
- 信息将存储在哪里
- 要存储什么值
- 存储何种类型的信息
|
|
这些语句告诉程序,它正在存储整数,程序也将找到一块内存用于存储,并将单元标记为counts。
实际上,我们可以用&
来检索其在内存中的位置
变量和变量名
命名方式类似于c,注意一下
- 只能字母字符、数字和下划线
- 名称第一个字符不是数字
- 区分大小写
- 无C++关键字
- 以两个下划线或下划线和大写字母打头的名称被保留用于实现,以一个下划线开头的名称将被用作全局辨识符
- 名称长度无限制
整型
short/int/long
计算机内存由bit单元组成,c++确保最小长度
- short至少16位
- int至少与short一样长
- long至少32位,且至少与int一样长
位与字节
位(bit)可看作电子开关的,0表示关,1表示开,8位内存块便有256种组合了,每增加一位可以增加一倍组合数
字节(byte)通常是八位内存单元,字节指的是描述计算机内存量的度量单位
我们也可以在头文件climits导入后查看关于整型限制的信息,具体地说它表示的各种限制的符号名称。
例如INT_MAX
为int最大取值,CHAR_BIT
为字节位数;
用size_of
操作符我们就可以得到具体的一种类型名的大小
无符号
前面的三种类型都可以通过无符号扩大范围,但前提是无负数要求的情况下
数字类型控制符
dec十进制
hex十六进制
oct八进制
输出是跟在变量后面
例如cout<<"chest = " << " (decimal)" <<endl;
char类型:字符和小证书
char类型专门为存储字符而设计,但是在cin和cout时发生过改变,cin时输入的字符在计算机内转化为数字,cout时则又转化为字符
成员函数cout.put()
cout.put()是同一个重要c++OOP概念——成员函数的第一个例子。例如类ostream有一个put()成员函数,用来输出字符。必须用句点将对象名和函数名称连接起来。句点被称为成员操作符。
而cout.put()的意思就是,通过类对象cout来使用函数put(),提供了另一种显示字符的方法可以替代«操作符,而将字符常量’M’和’N’显示为数字
重要复合类型——指针和自由存储空间
声明和初始化
int* p_new
C++程序员多采用这种格式,强调声明一个int指针
我们可以在声明语句中初始化指针,在这种情况下,被初始化的是 指针,而不是它指向的值
|
|
指针和数字
指针不是整型,所以我们不能在声明指针,要给指针赋值,要将数字值作为地址来使用,通过强制类型转换将数字变为合适的地址类型
|
|
使用new来分配内存!💘
new
可以根据程序的需要分配内存大小,而我们程序员所需要做的,就是告诉new,需要为哪种数据类型分配内存;new会找到一个长度正确的内存块,并返回内存块地址
之后我们要学会释放指针的内存
|
|
使用new创建动态数组!'
|
|
new操作符返回第一个元素的地址,如果我们要使用,可以直接通过psome[0],如果我们用p3=p3+1,那么p3的零基地址就+1,之后再次使用psome[0]就是原来的psome[1]了
尽可能使用const
将指针参数声明为指向常量数据的指针有两条理由
- 可以避免由于无意见修改数据导致的编程错误(比如先声明
const float gm=1.6
,再声明float * pm =&g_m
是不可行的 - 使用const使得函数可以处理const和非const实参,否则将只能接受非const数据,如条件允许,则应将指针形参声明为指向const的指针
函数探幽
内联函数
为提高程序运行速度所做的一项改进,由于编译的最终产品是可执行程序,而 内联函数提供了另一种选择,内联函数的汇编代码与其他代码内联
起来了。也就是,编译器将使用函数代码替换调用。
对于内联代码,程序无需跳到另一个位置执行代码又再调回来
而我们要使用这项特性,必须采取下列措施
- 函数声明前加上关键字inline
- 函数定义前加上关键字inline
|
|
程序输出,内联函数和常规函数一样,也通过值来传递参数,如果函数为表达式,那么也就传递表达式的值,这使得c++内联函数功能十分强大
内联与宏
一个计算平方的宏
#define SQUARE(X)X*X
这并不是通过传递参数实现的,而是通过文本替换实现的,X
就是参数的符号标记
|
|
实际上上述范例只有第一个可以正常工作,可以通过使用括号来进行改进:
#define SQUARE(x) ((x)*(x))
引用变量
C++新增一种复合类型——引用变量。
例如,将twin作为element变量的引用,则可以交替使用twin和element来表示该变量。
那么,这种别名有何作用?——用作函数形参,通过引用变量用作参数
|
|
&不是地址操作符,而是类型标识符的一部分,上面允许rodents和rats互换——它们指向相同的值和内存单元
——注意!
可以通过初始化声明设置引用,但通过赋值设置是不行的
如
|
|
rodents初始化指向了rats。接下来pt改为指向bunnies并不能改变引用
在函数中传入引用参数的话,我们就可以真正意义上修改参数的值了