C++ 学习笔记(一)

本文深入探讨了C++中的内联函数、重载函数及默认参数等高级特性,并讲解了const指针、引用的用途与注意事项,以及new与delete操作符的正确使用方式。
 

第一部分  面向过程程序设计

内联函数

函数声明: 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值