1、C++中的动态内存分配 new ------delete
Tyep *pointer = new Type; Type *pointer = new Type[N];
delete pointer; delete[] ponter;
new 和 malloc 的区别:
new关键字是C++的一部分,malloc 是由C库提供的函数,new以具体类型为单位进行内存分配, malloc只能以字节为单位进行内存分配。 new在申请单个类型的变量时可以初始化,如:int *p = new int(3); malloc则不可以。
2、C++的命名空间 namespace + 名字 {...........}
C语言中只有一个全局作用域,所有的全局标示符共享一个作用域,标示符之间可能发生冲突。
C++中提出命名空间的概念,命名空间将全局作用域分成不同的部分,不同命名空间的标示符可以同名,命名空间可以互相嵌套,而全局作用域就是默认命名空间。
使用方式:
使用整个命名空间: using namespace name;
使用命名空间中的变量: using name::variable;
3、强制类型转换
在C语言中: (Type) (expression) 或者 Type(expression)
这样的转换过于随便,而且难以定位,不利于代码的检查。
C++中 定义了4个强制类型转换的关键字:static_cast, const_cast, dynamic_cast, reinterpret_cast。
static_cast:
用于基本类型间的转换,但不能用于基本类型指针间的转换
int i=3; char c = static_cast<char>(i); //正确
int *pi = &i; char *pc = static_cast<char*> (pi); //error
用于有继承关系的类对象之间的转换和类指针之间的转换。(以后再详细)
static_cast 在编译期进行转换,无法在运行时检测类型,所以安全性不太高。
const_cast:
用于去除变量的const属性。
reinterpret_cast:
用于指针类型间的强制转换, 整数和指针类型间的强制转换。
dynamic_cast:
主要用于类层次间的转换,还可以用于类之间的交叉转换,具有类型检查功能,比static_cast更安全。