C++学习笔记(五)

来源:互联网 发布:java微信客服系统源码 编辑:程序博客网 时间:2024/06/14 01:09

1、静态数组与动态数组

只有静态数组可以用{}初始化,可以将指针看成是数组的迭代器,const创建数组时必须初始化,之后不能修改,静态数组的维数不能为0,动态数组的维数可以为0.

静态数组:int a[10];

动态数组:int  *p=new int[5];

2、指针数组和数组指针

指针数组:int (*p)[4];相当于二维数组:int a[3][4];

数组指针:int*p[4];数组中每个元素都是int型指针。

3、做操作数必须是非const的左值

4、显示转换-----强制类型转换

强制转换避免使用!

C语言转换是不考虑对象原有的类型,C++不同设置以下4种方式:

static_cast<内置类型/类类型>(被转换的对象名)    

dynamic_cast<内置类型/类类型>(被转换的对象名) 

reinterpret_cast<内置类型/类类型>(被转换的对象名)

const_cast<内置类型/类类型>(被转换的对象名)

       

静态转换编译时做到类检查 如:

double p=3.145;

int a=static_cast<int>(p);

c语言风格;

double p=3.145;

int a=(int)p;  显示  或int a=p; 隐示


char *p="Hello";

int *q=p;隐示不行

int *q=(int *)p; C风格

int*q=static_cast<int *>(p);p的类型是字符非数字类型

int *q=reinterpret_cast<int *>(p);可以

能够隐示转换类型的可以使用static_cast不能使用隐示转换类型的使用reinterpret_cast。

dynamic_cast动态转换用于类中的继承。

如:

class CA   {};

class CC:pulic CA{};

class CB{};

CA *p==newCC();

CC *p1=static_cast<CC *>(p);CC是CA的子类

CB *pb=static_cast<CB *>(p); 不可以

CB *pb=reinterpret_cast<CB *>(p);可以

CB *pb=dynamic_cast<CB *>(p);可以


const_cast 作用是去掉const,因为const的变量是无法修改的,可通过const_cast修改如:

const char *p="Hello";

char *q=const_cast<char *>(p);等价于将P所指向的重新设为可变变量。


5、使用switch代替if ,使用break避免贯穿

case **(必须是整数如int,char型)biang量的定义只能在最后或加括号。

6、while(可以是关系运算,函数等只要最后能够得出的结果(0或非1)即可)先检查条件再运行循环体

cin.clear();回复cin的功能

do --while保证至少循环一次,先循环在检查条件。

break:打断while、do  while、for、switch

continue:提前结束当次迭代,继续循环、

goto:禁止使用。

7、现代处理异常

try --catch--throw

容器用迭代器创建对象访问。

try中创建对象及调用等

throw抛出异常

catch接收异常输出异常原因。

8、函数参数传递-----引用形参(值可变)

引用不需要复制,通常实参到形参是一个复制过程效率低

若需要返回多个量,其中一个用return即可,其余的只要形参是引用即可。

引用的目的不是因为要修改实参而是不需要复制。





0 0