第一部分 面向过程程序设计
内联函数
函数声明: inline int FuctionName(…);
注意事项:
1、先声明后调用
2、内联函数中,不能含有复杂的结构控制语句,如switch, while
3、递归函数不能用于做内联函数。
与宏定义相比的优点:
1、 格式比宏定义自由;
2、 可以进行常规函数的参数类型检查
重载函数
重载函数将实参类型和所有被调用的函数形参类型意义比较来判定。
1、 重载函数至少在参数个数、参数类型或参数顺序上有所不同。
2、 让重载执行不同的功能,是不好的编程风格。同名函数应该具有相同的功能。
默认参数的函数
1、 当函数声明和函数定义同时出现的时候,定义中不允许默认参数。如果函数只有定义,没有声明,则默认参数可以出现在函数定义中。
2、 默认值可以是全局变量,全局常量,甚至是一个函数;但不可以是局部变量。
3、 默认参数可以和函数重载相结合
void point(int a, int b) {//…}
void point(int a) {return point(a, 4); }
void point() {return point(3, 4); }
可以用下列默认参数函数来代替:
void point(int a = 3, int b = 4) {//…};
编译预处理
#include
#define 建立常量,在C++中已经被const取代;
定义带参数的宏,在C++中被inline内联函数取代
条件编译指令# if, # else, # elif, # endif, # ifdef, # ifndef,
# undef 取消符号定义
const指针
指向常量的指针(常量指针)
在指针定义语句的类型前加const,表示指向的对象是常量
const int a = 78;
const int b=24;
const int * p = &a;
*p = 58; //error: 不能修改指针指向的常量
p = &b; //ok: 指针值可以修改
定义指向常量的指针只限制指针的间接访问操作,而不能规定指针指向的指本身的操作规定性。
指针常量
在指针定义语句的指针名前加const表明指针本身是常量
char * const p = “asdf”;
p = “gfds” //error: 指针常量不能改变其指针值
*p = ‘b’ //ok
*(p+1) = ‘d’ //ok, p指向的内容为”bdds”
*p++ = ‘y’ //error
const int b = 23;
int * const pi = &b //error: 不能将const int * 转换成int *
指向常量的指针常量
const int c = 8;
const int * const p = &c;
delete & new
1、当用delete删除new分配的数组时,delete应该带[]
int * array = new int[arraysize];
…
delete[] array;
2、每次使用new动态分配内存的时候,都应检测new的返回值是否为NULL,以防分配失败。
引用
不能建立对数组的引用,因为数组石墨个数据类型元素的集合,数组名表示该元素集合空间的起始地址,他自己不是一个名副其实的数据类型。
引用的作用
1、引用传递参数
merit: 传递引用给函数与传递指针的效果一样
fallacy: 引用隐藏了函数所使用的参数传递的类型,所以无法从所看到的函数调用判断其是值传递还是引用传递。
2、返回多个值
3、用const限定引用
转递指针和引用更大的目的是效率,当一个数据类型很大时,因为传值要复制副本,所以不可取。
但是传递指针和引用存在传值所没有的危险:传递的地址特征使得所传的参数处于随时被修改的危险之中。保护实参不被修改的方法是传递const指针和引用。
double* fn(const double* pd)
double& fn(const double& pd)
本文深入探讨了C++中的内联函数、重载函数及默认参数等高级特性,并讲解了const指针、引用的用途与注意事项,以及new与delete操作符的正确使用方式。
&spm=1001.2101.3001.5002&articleId=1356994&d=1&t=3&u=06fc1f55232341cba05999f7429bd80f)
751

被折叠的 条评论
为什么被折叠?



