C++入门篇

2018-04-03  本文已影响0人  Amanda_Lhy

C语言入门教程,C语言入门书籍《C语言小白变怪兽》_C语言中文网

C++入门教程,全套C++基础教程(已更新完毕)_微学苑(编程第一站)


一、bool类型

bool类型是C++语言基本数据结构之一,bool类型取值范围仅有两个值:true和false。在做逻辑运算时,默认非零即为ture

C++语言引入命名空间(Namespace)这一概念主要是为了避免命名冲突,其关键字为 namespace。

指定所使用的变量时需要用到“::”操作符,“::”操作符是域解析操作符。

二、全名空间

(1)

Li::flag = 0; //使用小李定义的变量flag

Han::flag = false;  //使用小韩定义的变量flag

(2)

除了直接使用域解析操作符,还可以采用using声明(using declaration)

using Li::flag;

flag = 0;  //使用小李定义的变量flag

Han::flag = false;  //使用小韩定义的变量flag

在代码的开头用using声明了Li::flag,其含义是using声明以后的程序中如果出现未指明的flag时,则使用Li::flag,但是若要使用小韩定义的flag,则仍需要Han::flag。

(3)

using声明不仅仅可以针对命名空间中的一个变量,也可以用于声明整个命名空间

using namespace Li;

flag = 0;    //使用小李定义的变量flag

Han::flag = false;  //使用小韩定义的变量flag

如果命名空间Li中还定义了其他的变量,则同样具有flag变量的效果,在using声明后,若出现未具体指定命名空间的命名冲突变量,则默认采用Li命名空间中的变量。

命名空间内部不仅可以声明或定义变量,对于其它能在命名空间以外声明或定义的实体,同样也都能在命名空间内部进行声明或定义,例如变量的声明或定义、函数的声明或定义、typedef等都可以出现在命名空间中。

三、输入输出

在编写C++程序时,如果需要使用输入输出时,则需要包含头文件iostream。在iostream中定义了用于输入输出的对象,例如常见的cin表示标准输入、cout表示标准输出、cerr表示标准错误。

四、引用(Reference)

引用(Reference)是C++语言相对于C语言的又一个扩充,类似于指针,只是在声明的时候用&取代了*。引用可以看做是被引用对象的一个别名,在声明引用时,必须同时对其进行初始化。引用的声明方法如下:

    类型标识符 &引用名 = 被引用对象

如果我们不希望通过引用来改变原始变量的值时,我们可以按照如下的方式声明引用:

    const 类型标识符 & 引用名 = 被引用的变量名

五、强制类型转换

在C++语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于强制类型转换的。我们逐一来介绍这四个关键字。

1) static_cast

在C++语言中static_cast用于数据类型的强制转换,强制将一种数据类型转换为另一种数据类型。

2) const_cast

在C语言中,const限定符通常被用来限定变量,用于表示该变量的值不能被修改。而const_cast则正是用于强制去掉这种不能被修改的常数特性,但需要特别注意的是const_cast不是用于去除变量的常量性,而是去除指向常数对象的指针或引用的常量性,其去除常量性的对象必须为指针或引用。

3) reinterpret_cast

在C++语言中,reinterpret_cast主要有三种强制转换用途:改变指针或引用的类型、将指针或引用转换为一个足够长度的整形、将整型转换为指针或引用类型。在使用reinterpret_cast强制转换过程仅仅只是比特位的拷贝,因此在使用过程中需要特别谨慎!

reinterpret_cast可以将指针或引用转换为一个足够长度的整形,此中的足够长度具体长度需要多少则取决于操作系统,如果是32位的操作系统,就需要4个字节及以上的整型,如果是64位的操作系统则需要8个字节及以上的整型。

4) dynamic_cast

dynamic_cast用于类的继承层次之间的强制类型转换,我们将在讲到类的继承的时候再来介绍dynamic_cast。

六、内联函数(inline)

C++语言新增关键字 inline,用于将一个函数声明为内联函数。在程序编译时,编译器会将内联函数调用处用函数体替换,这一点类似于C语言中的宏扩展。

采用内联函数可以有效避免函数调用的开销,程序执行效率更高。使用内联函数的缺点就是,如果被声明为内联函数的函数体非常大,则编译器编译后程序的可执行码将会变得很大。另外,如果函数体内出现循环或者其它复杂的控制结构的时候,这个时候处理这些复杂控制结构所花费的时间远大于函数调用所花的时间,因此如果将这类函数声明为内联函数,意义不大,反而会使得编译后可执行代码边长。

通常在程序设计过程中,我们会将一些频繁被调用的短小函数声明为内联函数。

七、new和delete操作符

在C语言中,动态分配和释放内存的函数是malloc、calloc和free,而在C++语言中,new、new[]、delete和delete[]操作符通常会被用来动态地分配内存和释放内存。

需要注意的是new、new[]、delete和delete[]是操作符,而非函数;new和delete也是C++的关键字。

操作符new用于动态分配单个空间,而new[]则是用于动态分配一个数组,操作符delete用于释放由new分配的空间,delete[]则用于释放new[]分配的一个数组。

八、异常处理(try和catch)

C++新增throw关键字用于抛出异常,新增catch关键字用于捕获异常,新增try关键字尝试捕获异常。通常将尝试捕获的语句放在 try{ } 程序块中,而将异常处理语句置于 catch{ } 语句块中。

异常处理的基本语法如下所述。首先说一下抛出异常的基本语法:

    throw 表达式;

抛出异常由throw关键字加上一个表达式构成。抛出异常后需要捕获异常以及异常处理程序,其基本语法如下:

try

{

    //可能抛出异常的语句

}

catch (异常类型1)

{

    //异常类型1的处理程序

}

catch (异常类型2)

{

    //异常类型2的处理程序

}

// ……

catch (异常类型n)

{

    //异常类型n的处理程序

}

由try程序块捕获throw抛出的异常,然后依据异常类型运行catch程序块中的异常处理程。catch程序块顺序可以是任意的,不过均需要放在try程序块之后。

上一篇下一篇

猜你喜欢

热点阅读