C++的新特性
-
cout是预定义的标准输出流对象,标准输出流对象代表控制台输出,通常指的是计算机的屏幕。“<<”为输出运算符,可用于输出C++语言中任何基本类型的数据。在C++中将数据送到输出流中称为“插入(inserting)”或“放到(putting)”。所以“<<”常被称为“插入运算符”。
-
cin是预定义的标准输入流对象,标准输入流对象代表控制台输入,通常指的是计算机的键盘。输入运算符“>>”从输入设备键盘取得数据送到输入流cin中,然后送到内存。在C++中,这种输入操作称为“提取(extracting)”或“获取(getting)”,“>>”常被称为“提取运算符,可用于输入C++语言中的任何基本类型的数据”。
-
输入和输出不是C++语言的组成部分,它们由流库iostream支持。流库在iostream.h中声明并定义。因此C++程序必须包含头文件iostream.h,才能使用标准输入输出流库中的对象cin或者cout进行I/O操作。
-
const 修饰符
-
符号常量的定义和初始化:
1:在C中,可以使用#define来定义符号常量
eg: #define PI 3.1415926
2:C++中提供关键字const 来定义符号常量
Eg: const float PI=3.1415926;
constint v[]={1,2,3,4};//数组元素v[i]是常量
const int x;//定义常量时应该赋值否则出错
3:C++中的常量必须指明类型,如果没有指明类型,编译器默认int型。
-
const修饰函数参数
当一个函数不必修改调用参数指向的对象时,参数则用const修饰,这样可以组织参数被函数修改,减少程序中的错误,显著提高软件的可靠性。
-
const 和指针
当用到指针时,const所修饰的对象牵涉到指针本身和它所指向的对象两个实体。当我们将关键字const 放到一个指针声明的前面时,这时指针所指向的对象成为常量。
Eg: char s[]=”glory”;
const char* pc=s;//指针pc所指向的字符串为常量,可以修改pc的值
char* const cp=s;//常指针(固定指针),可以改变常指针所指向的对象,但不能改变常量指针的值。
Eg: char *const cp;//cp是个常指针,指向字符串(对象可变,指针不变)
char const*cp1;//cp1是指针,指向常量字符串
const char* cp2;//cp2是一个指针,指向字符串常量。
-
内联函数
-
定义:在函数声明或定义的前面加上关键字inline,该函数就被声明为内联函数。内联函数又称内嵌函数或内置函数。
Eg: inline int max(int x,int y) //max被说明为内联函数
{
int z;
if(x>y)z=x;
else z=y;
return z; }
-
目的:在C++语言中设置内联函数的目的是为了提高程序的执行效率,从而消除函数调用时的时间开销,提高运行速度。
-
内联函数可以是类的成员函数,如果直接在类的内部给出成员函数的定义,该函数自动成为内联函数,此时无需使用关键字inline说明。
Eg: class date
{
int day,month,year;
public:
void init_date(int dd,int mm,int yy)//内联函数
{day=dd;month=mm;year=yy;}
};
-
函数原型
-
函数返回值类型 函数名(函数参数及其类型的列表)
-
作用:C++语言是强类型化语言,任何函数在使用以前必须有该函数的原型说明,以便进行实际参数与形式参数之间的类型匹配检查。
-
C++的语法允许我们在声明函数原型时省略参数名。
Eg: inttranslate(float,float,float);
-
带缺省参数的函数
-
含义:1:可以在函数原型中可以给参数赋值,这些值称为缺省值
2:函数调用时允许缺省部分或者全部实际参数,这时C++的编译器自动地以缺省值作为相应的实际参数值。
Eg:void myfunc(double d=0.0)
{
……
}
3:如果给某个参数一个缺省值,那么其后的所有参数都需要赋给缺省值,否则编译时,会出错。
-
函数名重载
-
在C++语言中允许两个或两个以上的函数使用相同的函数名,这种情况称为函数名重载。Eg: int abs(int n);//求整数的绝对值
Long abs(long n);//求长整数的绝对值
Double abs(double n);//求双精度数的绝对值
-
C++中函数重载的关键是,重载的函数必须具有不同参数列表,即要么参数类型不同或者参数个数不相等。只有返回类型不同的函数不能重载。
-
new和delete运算符
-
在C++中不仅可以像C里面一样用malloc()分配动态内存,用函数free()释放动态内存。而且还可以使用new 分配动态内存,用delete释放动态内存。执行new操作时,如果有足够的内存空间,则按要求从动态内存分配空间,new运算符返回指向该内存起始地址的指针;如果内存空间不够,则返回空(NULL)指针。delete运算符释放new分配的动态内存。
Eg: int *p;
P=new int;//为整数分配动态内存空间
-
优点:1:简洁性:new能自动分配的足够的内存空间以容纳指定类型的对象,而不必使用sizeof运算符。New自动返回指定的正确类型的指针,由此无需使用类型转换。
2:可靠性:由于分配的内存空间的大小是自动计算的,所以能够防止分配错误数量的内存单元。并且在编译时进行类型匹配检查,能够尽早发现类型不匹配错误。
3:灵活性:new和delete运算符可以被重载。
-
用new申请的动态内存,必须用delete释放,否则会引起运行时错误。
-
引用
-
定义:在声明一个变量时,在变量名的前面加上&就将该变量声明为一个引用。引用的最重要的用法是作为函数参数。
-
引用是一个隐含指针,所以函数使用引用参数时是一种传址调用方式。即在调用函数时传送实际参数的地址。
Eg:
指针参数 引用参数 比较
Swap(&j,&i); Swap(j.i);
Void Swap(int *x,int*y) void Swap(int &x,int &y)
{ {
Int temp; inttemp;
Temp=*x; temp=x;
*x=*y; x=y;
*y=temp; y=temp;
} }
-
使用引用参数相比指针参数好处:
1:实际参数的地址被自动传递,不需要记住传递参数的地址
2:比指针参数方法更清晰,更简便。