1.数据类型的扩展
在C++中 suruct union enum 定义的名称都可以直接用于定义变量(不必typedef)
2.引入const
代替#define const 比#define 更安全且便于使用
3.void指针
可以将其他类型指针赋给他(不可以是函数指针)。
用途:①作为函数的参数,可以传递任何类型的指针,②可以用于返回一个无类型的对象指针
4.new和delete
用于代替malloc(),和free().
p=new int;
p=new int (x); //分配空间并初始化为x
p=new type[n]; //分配具有n个元素的数组
new根据类型,自动计算空间无需sizeof() 计算
p保存分配空间的首地址,分配失败则返回空指针。所以用
if(!p){cout<<"分配失败"<<endl;}
来判断内存是否分配成功.
delete p;//释放内存
delete []p;//释放内存组
5.引用,给同一个变量,起一个新名字,对新旧名字进行操作都改变变量内存所保存的值,定义引用时要在定义时确定引用对象,不可定义后赋值。
int f;
int &a=f;//正确
int &b;
b=f;//错误,至于这里为什么错误在我另一篇博文(指针常量,常量指针与引用)中有说明
6.类型转换
(1)隐式类型转换
①将窄类型转换为宽类型,也就是将占用内存少的类型向占用内存多的类型转换
例:
int a=1;
float b=2.2;
double c=3.3;
a+b+c;//此时系统会先计算a+b时将a转换为float型再将结果转换为double再与c相加
②在赋值语句右边转换为左边的类型
int a;
float b=3.4;
a=b;//则a=3
③在函数传递参数时,若类型不同也会发生类型转换
int add(int a,int b)
{
return a+b;
}
int main()
{
int a=1;
float b=2.1;
add(a,b);
}//则b转换为int型2参与运算
④函数返回时,也可以隐式类型转换
double add(int a,int b)
{
return a+b;
}//返回时先将结果转换为double再返回
(2)显示类型转换
int a=4;
float c=(float)a;//法一
float b=float(a);//法二