本文是对"铁道版"c++一书的知识点总结,如果侵权,请及时告知我,将尽快删去,本文禁止转载
函数原型
函数原型的参数表中可不包含参数的名字,而只包含它们的类型
如果不写函数类型,默认int
主函数main()不必进行原型说明
const修饰符
指向常量的指针
const char *pc="abcd";
不允许改变指针所指的常量,但是可以改变指针所指的地址
常指针
char * const pc="abcd";
可以改变指针所指地址中的数据,不能改变指针所指的地址
- 如果用const定义的是一个整型常量,关键字int可以省略
- 常量一旦建立,在程序的任何地方都不能被更改
- 与#define不同,const定义的常量可以有自己的数据类型,编译时有良好检测性
- 函数参数可以用const说明
int const a=3;
int *p=&a;//错误
内联函数(inline)
内联函数在第一次被调用之前必须进行完整的定义
内联函数空间换时间
带有默认参数值的函数
在此情况下,允许实参个数和形参个数不同
- 在函数原型中,所有采取默认值的参数都必须出现在不去默认值的参数的右面
- 在函数调用时,若某个参数省略,则其后的参数皆应省略且采用默认值
#include<iostream>
using namespace std;
void write(int =5);
int main()
{
write();
return 0;
}
void write(int x)
{
cout << x;
}
函数重载
在同一作用域内,只要函数参数的类型不同,或者参数个数不同,或者二者兼而有之,两个或者两个以上的函数可以使用相同的函数名
- 调用重载函数时,函数返回值类型不在参数匹配检查之列
- 函数重载与带默认值的函数一起使用时,有可能引起二义性
作用域标识符::
希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上"::"
强制类型转换
new和delete运算符
程序代码区,全程数据区,栈,堆
指针变量名=new 类型;
将该块内存的首地址存于指针变量中(能够自动返回正确的指针类型,没有足够内存返回NULL)
delete p; p=NULL;//避免多次删除带来的问题
指针变量名=new 类型名[下标表达式];
delete [ ]指针变量名;
指针变量名=new 类型名(初值);
运算符new不能对动态分配的数组存储区进行初始化
引用
引用和其代表的变量具有相同的地址
- 必须对引用进行初始化
- 为引用提供的初始值,可以是一个变量或是另一个引用
- 引用初始化后不能再被重新声明为另一个变量的引用
int &j; //错误
使用引用作为返回值,可以将该函数调用放在赋值运算符的左面
int& index(int i)
{
return a[i];
}
index(2)=32;
- 不允许建立void类型的引用
- 不能建立引用的数组
- 不能建立引用的引用 int &&r=n;
- 不能建立指向引用的指针 int &*p=n;
- 可以将引用的地址赋给一个指针,此时指针指向的是原来的变量
- 可以用const对引用加以限定,不允许改变该引用的值
int i=5;
const int &a=i;
a=3; //错误
i=3; //正确,则a=3