C++基础
C++对C语言的扩充
-
注释行
-
cout和cin
cout的使用:
-
以不同进制输出:
如:cout << oct << i<< end
-
设置宽度,等
函数 名称 oct 八进制 hex 十六进制 dec 十进制 setbase() 表示n进制,包含在中,n取8,10,16 setprecision(n) 设置浮点数输出的有效位数(四舍五入) setiosflags(ios::left) 左对齐 setw() 输出总的宽度 setfill(’*’) 设置填充字符
-
-
灵活的变量声明:C++可以在任何地方声明局部变量,从声明处开始到该变量所在的最小分程序末有效
-
结构,联合,枚举:声明变量时,不必添加 struct,union,enum
-
函数原型:
- 函数原型可以不写出参数,但要保留类型 如:long fun(int,int)
- 函数定义由首部和函数体构成,函数首部末尾不加封号,参数必须给出名字
- 标准c++,mian()函数,必须声明为int类型,且不用函数原型声明。
- c++中,函数参数为空表示函数不带任何参数:如fun()和fun(void)
-
const
const与#define比较:
-
const能够明确指定类型
-
可以定义在特点的函数或文件中
-
更加适合复制的类型
const修饰符
-
指向常量的指针:const char * pc:指针指向的值不可改,地址可以改。
-
常量指针:char * const pc :指针指向的值可以改,地址不可以改。
-
指向常量的常指针:const char *const pc:值和地址都不可以该。
-
如果const修饰的是常量,那么int可以省略。如:const int a=200 等价于 const a=200;
-
const也可以用于修饰函数参数,保证实参不在函数内被改变
-
const的值可以被改变:
int a=5; const int& b = a; a = 10; cout << a << b << endl;
这里,b的值改变成了10;
-
-
void类型指针:可以定义void类型指针,不能定义void类型变量。void型指针是通用型指针,它可以接受任何类型指针的赋值,但是对它进行输出或传递指针值时,必须使用显式类型转换,否者会出差。
-
内联函数:C++编译器将函数代码插入到调用函数处,同时用形参代替实参数,以便在程序运行时不在进行函数调用。
内联函数的好处就是,当函数体本身不复杂时,调用函数所花费的时间会比实现函数功能的时间大。内联函数可以实现,不调用函数而直接进入函数体,**降低了调用时间的系统开销,提高了运行速度。**宏也可以代替一个函数,但是宏只是做简单的字符替换而没有做语法检查。如下:
#define Fun(x) x*2 Fun(1+2)=5
-
带有默认参数值的函数:形参数个数可以与实参个数不同。方法是,在定义形参时给出一个或多个默认的实参。
编译器从左到右将实参与形参结合,若遇到未指定的实参,则编译器安顺序从函数原型中的默认值不足缺少的实参。
需要注意的是:
- 所有取默认值的参数必须取在非默认值参数的左边。
- 若某个参数省略则后边的参数都应该有默认值,不运行某个参数省略后,后边继续
-
函数重载:在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。
int fun(int a, int b) { return a + b; } double fun(double a, double b) { return a + b; } int main() { cout << fun(5, 5)<<endl; cout << fun(5.5, 5.5); return 0; } //函数重载与带默认值的函数: //二义性:系统不知道选哪个,不合法 void fun(int a, int b=5); void fun(int a); fun(3); //下面是个法的: void fun(int a,int b,int c=3); void fun(int a); fun(1,2)
-
作用域标识符“::”
- 如果两个同名的变量,一个是全局的,一个是局部的,那么局部变量在其作用域内具有较高的优先权。
- 如果希望在局部变量作用域内访问同名的全局变量,则可以再该变量前加::作用标识符
-
强制类型转换
C语言支持(double)x格式的强制类型转换,C++也支持。但C++提供了一种更加方便的,类似于调用函数的格式:double(x);
-
new和delete运算符
-
new和delete比malloc和free(),性能更加优越,使用更方便灵活。
-
new用于内存分配的最基本形式为:
指针变量名称=new 类型
-
为数组动态申请空间:
指针变量名称=new 类型[下标表达式]
为多维数组申请空间时,必须提供所有维的大小,其中第一维可以是任何表达式。
-
为普通变量申请空间时,可以对其初始化
指针变量名称=new类型(初值)
new和delete的优点:
- 自动计算所要分配内存类型大小
- new能够自动返回正确的指针类型
- 若new申请空间失败则返回空指针
-
-
引用:引用和其所代表的变量共享同一块存储空间;
-
格式:&(别名)=变量
-
和const一样,在声明引用时,必须初始化。
-
引用的初始值可以是一个变量或另一个引用
-
指针是通过地址访问变量,而引用是通过别名直接访问某个变量
-
被初始化后,不能在被重新声明为另一个变量的引用
-
-
引用做函数参数:
普通参数传递是单向的,而已指针变量和引用做参数时传递是双向的,既参数和实参共用同一块存储空间。
如:void fun(&a,&b);
-
使用引用返回函数值:
int& fun(),除了将函数定义为返回一个引用外,通常函数不出现在等号左边。
-
对引用的进一步说明
- 不能建立void型引用
- 不能建立引用的数组,如:&ra[4]=a;
- 不能建立引用的引用,如&&r=a;
- 可以用const限定,不允许改变引用的值。
- &只是在定义时为引用,之后为普通的取地址符号