第二章C++概述

2018-06-07  本文已影响0人  割麦子洁

1、操纵符

dec 把转换基数设置为十进制

hex 把转换基数设置为十六进制

oct 把转换基数设置为八进制

缺省的转换基数是十进制

2、灵活的局部变量说明

在C语言中:局部变量说明必须集中在可执行语句之前。不允许局部变量说明和可执行语句在程序中交替出现.但c++中可以。

3、结构、联合和枚举名可直接作为类型名

在C++中定义变量时,不必在结构名、联合名或枚举名前冠以struct、union或enum,结构名、联合名、枚举名可直接作为类型名。

注:弄清楚什么叫类型名、结构名、枚举名等

比如int fun(int a){ }其中第一个int为返回值类型名,若将其省略,c语言默认为int。

4、const修饰符来定义常量

例如:const float PI=3.14159;

// 常量PI是有类型的,它占用存储单元,有地址,可以用指针指向这个值,但不能修改它。

为什么要使用const:因为#define的不安全性

const可以与指针一起使用,它们的组合情况可归纳为以下三种:

      . 指向常量的指针

      . 常指针

      . 指向常量的常指针

(1) 指向常量的指针是指:一个指向常量的指针变量。

例如: const char* name="chen"

//声明一个名name的指针变量,它指向一个字符型常量,初始化name为指向字符串"chen"

name= "zhang " √

(2) 常指针是指:把指针所指的地址 ,而不是它指向的对象声明为常量。

例如:char* const name="chen"

//声明一个名为name的指针变量,该指针是指向字符型数据的常指针,用“chen”的地址初始化该常指针。

name[3]=′a ′ √

(3) 指向常量的常指针是指:这个指针本身不能改变,它所指向的地址中数据也不能改变。

例如:const char* const name="chen"

//声明了一个名为name的指针变量,它是一个指向字符型常量的常指针,用"chen"的地址初始化该指针。

说明: (1) 如果用const定义的是一个整型常量,关键字int可以省略。

例如:下面的两行定义是等价的:

    const int LIMIT=100;

    const LIMIT=100;

(2)函数的形参也可以用const说明,用于保证形参在该函数内部不被改动,即在函数中对这些参数只许读,而不许写


5、函数原型

返回值类型 函数名(参数表);//相当于函数声明

用于说明函数的名称、参数类型与个数,以及函数返回值的类型。

(1) 函数原型的参数表中可不包含参数的名字,而只包含它们的类型。

(2)函数定义由函数说明函数体两个部分构成。

long Area(int length,int width)//函数的说明部分

{  …return(length*width);}

(3)原型说明中没有指出返回类型的函数(包括主函数main),C++默认该函数的返回类型是int

(4) 如果一个函数没有返回值,则必须在函数原型中注明返回类型为void。这样在主函数中就不必有“return 0;”了。

(5) f( ); //表示该函数不带任何参数

    f(void);  //表示该函数不带任何参数,参数表为空(void)


6、内联函数

C++编译器使用函数体中的代码替代函数调用表达式, 这样能加快代码的执行,减少调用开销。

说明:

(1) 内联函数在第1次被调用之前必须进行完整的定义,否则编译器将无法知道应该插入什么代码。

(2) 在内联函数体内一般不能含有复杂的控制语句,如for语句和switch语句等。

(3)一般为1~5条语句而使用频繁的函数才定义为内联函数, 这样可大大提高运行速度。

(4) C++的内联函数具有与C中的宏定义 #define相同的作用和相似的机理,但消除了#define的不安全因素。


7、带有默认参数的函数

函数原型说明为:

int special(int x=5,float y=5.3);//x与y就是带有默认参数值

以下的函数调用都是允许的:

special( );        // x=5,  y=5.3

special(25);        // x=25, y=5.3

special(100,79.8); // x=100,y=79.8

说明: 

(1)在声明函数时,所有指定默认值的参数都必须出现在不指定默认值的参数的右边,否则出错。

(2) 在函数调用时,若某个参数省略,则其后的参数皆应省略而采用默认值。不允许某个参数省略后,再给其后的参数指定参数值。

special( , 21,5); ×

(3)在函数原型中默认参数可以不包含参数的名字

void write( int =5);//没有参数名


8、函数的重载

当两个或者两个以上的函数共用一个函数名时,称为函数重载。被重载的函数称为重载函数。

重载函数应在参数个数参数类型上有所不同,或者二者兼而有之

说明:

(1) 函数的重载与带默认值的函数一起使用时,有可能引起二义性

(3) 在函数调用时,如果给出的实参和形参类型不相符,C++的编译器会自动地做类型转换工作。如果转换成功,则程序继续执行。

    void f_a(int x);

    void f_a(long x);

    int c=f_a(5.56);//编译器无法确定将5.56转换成int还是long类型


9、作用域运算符::

全局变量

10、无名联合

一种特殊联合,它在关键字union后面没有给出联合名,它可使一组数据项共享同一内存地址。

在此无名联合中,无名联合变量x中的整型成员i和双精度型d具有相同的存储地址。

union data      union

{                   {

    int  i;        int  i;

    float f;        float f;

    }                }

11、强制类型转换

int i=10;

double x=(double)i;//C语言

double x=double(i);//C加加, 使得类型转换的执行看起来好象调用了一个函数

12、new与delete动态分配内存和释放动态分配的内存。

C语言使用函数malloc()和free()

C++使用运算符new和delete

指针变量名 = new 类型;    //运算符new就从存储区中为程序分配一块与类型字节数相适应的内存空间,并将该块内存的首地址存于指针变量中。很重要的总结!!!

    int *p;   //声明一个整型指针变量p

    p=new int;  //new动态分配存放一个整数的内存空间,并将其首地址赋给指针变量p

    *p=10;//赋值-方法1

    delete 指针变量名 ;//释放p指向的存贮空间

    其中,指针变量中存着new分配的内存的首地址。

int* p=new int(99);//赋值-方法2

说明:

(1)char* p=new char[10];

      int* op=new int[5][4];

(2) new可在为简单变量分配内存空间的同时,进行初始化。但不能为数组分配内存空间的同时,进行初始化

(3) delete [ ]p;

(4) 使用new动态分配内存时,如果没有足够的内存满足分配要求,new将返回空指针(NULL)。

      NULL为空指针常数,通常是 0。

13、引用

作用:为变量另起一个名字,变量的引用通常被认为是变量的别名。

声明:  类型 & 引用名 = 已定义的变量名;//声明了一个整数类型的引用j,用整型变量i对它进行初始化,这时j就可看做是变量i的引用,即是变量i的别名。(也就是说,变量i和引用j占用内存的同一位置。当i变化时,j也随之变化,反之亦然)

说明:

(1)例如下述声明是错误的。

    int i;

    int &j;  //错误

    j=i;

   应该是:在声明一个引用时,必须立即对它进行初始化

    int i;

    int &j=i;

(2) int i=5;

      int &j1=i;

      int &j2=j1;//为引用提供的初始值,可以是一个变量或另一个引用。变量i有两个别名:j1和j2。

(3) 指针是通过地址间接访问某个变量,需要书写间接运算符“*”;

int i=15; //定义整型变量i,赋初值为15

int *iptr=&i; //定义指针变量iptr,将变量i的地址赋给iptr

int &rptr=i;  //声明变量i的引用rptr,rptr是变量i的别名

(4) 引用在初始化后不能再被重新声明为另一个变量的引用(别名)。

(5)引用运算符“&”与地址操作符“&”

2、引用作为函数参数

① 用变量做函数参数

② 用指针做函数参数

③ 用引用做函数参数

3、 使用引用返回函数值    P99YE

使用引用可以返回函数的值,采用这种方法可以将该函数调用放在赋值运算符的左边

上一篇 下一篇

猜你喜欢

热点阅读