文章目录
1、从宏到内联函数
(1)写一个返回最大值的宏定义(C语言)
(2)引入内联函数(C++)
宏定义有些硬伤,那就是它所做的就是简单的文字替换,不太适合大规模的程序使用。
而且,它不会判断类型,传入什么值就是什么值,不会对类型进行判断,不小心的话可能因为运算符的优先级次序,把传递进去的参数弄乱,因此往往需要自己判断好类型然后加上对应的的括号才能预防传参出错的问题。
C++的内联函数(inline function)正是用来解决此类问题而出现的,基本上可以把内联函数堪称“单纯的替代”同时C++提供了内联函数的“参数检验”的功能。
比如上述的C语言的宏定义:#define BIG(a,b) (a>b?a:b)
可以C++中的改成:
2、函数参数的缺省值
在C++中,可以给 函数参数设定缺省值,也就是该参数的默认值。
有了缺省值后,就可以不传入该缺省参数,当然如果有需要,也可以传入,则该缺省值就会被替换掉。
注意:缺省值需要往后放,必须跟在其他必须传入的参数后面。
3、C++的常量与引用
(1)常量类型
在C++中,我们可以使用const关键字来定义常量,常量是不能更改和重新赋值的。
(2)常量与引用
也就说明,常量引用可以引用常量。不过,不能用常量来初始化一个非常量类型,因为这相当于间接改变变量。
4、函数重载
(1)所谓重载就是:不同函数使用同一个函数名。
之所以需要重载,是为了解决“只因函数参数的数据类型不一样,即必须设计算法完全县共同的但函数名不同的多个函数”的缺憾。
有了函数重载,我们可以定义多个同名不同类型的函数,而且不用管对哪一种数据类型进行处理,都只要调用该类型名进行传参就行了。
(2)使用函数重载
比如我们可以定义以下4个同名函数:
使用它们时则是如此:
由上可以知道,重载函数可以返回不同类型的值。
注意点:两个重载函数的参数个数不同;一个和多个参数类型不同。
5、new运算和delete运算
(1)C++提供的new和delete运算是在堆(heap)中分配和删除存储块的。
使用new运算必须指明数据类型,由new分配足够多的内存块,并且返回该存储块的首地址作为指向该指定类型的指针。
此处的p= new int
表示动态分配一个int类型的存储区,并且将首地址赋值给指针p;
最后的delete p
表示释放指针p所指向的存储空间,也就是前面分配的int存储区。
(2)使用new分配存储区的注意点
- new可以自动计算它要分配的存储空间的大小,因而可以为更加复杂的数据进行空间分配。比如
int *p= new int[10];
- 多维数组分配空间时,每一维的界值大小都不能忽略,便于进行存储空间的计算。比如
int *p= new int[2][3][4];
- 分配空间时可以初始化,比如
int *p= new int(123);
,表示的就是为指针p分配一块int存储区,并且将该存储区初始化为123。 - delete释放空间时可以不指定空间大小:
delete []p;
,中括号[]在p的前面。