天天看点

从C语言到C++语言

 ​​C++​​​ 读作“C加加”,是“C Plus Plus”的简称。顾名思义,C++ 是在​​C语言​​的基础上增加新特性。从语法上看,C语言是 C++ 的一部分,C语言代码几乎不用修改就能够以 C++ 的方式编译。

       对于C和C++的关系,有很多种说法,新人很容易认为C++是C的升级版,C++比C要高级,C++高大上,C过时了,这种想法不一定对,我们先来看一个数据。

从C语言到C++语言

       从上表中看出,在中国以外,C程序员比C++程序员多很多。

       这么多年了,我也搞不清楚自己是C程序员,还是C++程序员,好像没什么差别。

       对我来说,采用C++的目的就是提高开发效率,C++有很多新的特征,这些新特征并不一定实用,甚至很烦人,所以我仍然采用断章取义的方式来介绍C++,不管是C还是C++,实用就好。

C++程序的命名规则

       C++头文件一般采用.h后缀,也用有.hpp的。

       C++程序文件一般采用.cpp后缀,也有用.cc的,建议采用.cpp。实际上,C++对程序文件的命名没有强制要求,采用.cpp为后缀是大部分程序员的习惯。

C++程序的编译

       在某些UNIX系统中,C和C++是两个不同的编译器,在CentOS中,C的编译器是gcc,C++的编译器是g++。

1、安装g++编译器

       在命令提示符下输下g++,如果出现以下提示,表示已安装好g++编译器。

从C语言到C++语言

如果出现以下提示,表示还没有安装好g++编译器。

从C语言到C++语言

我在虚拟机上安装了CentOS 6.9,可以采用yum在线安装g++编译器,前提条件是计算机必须接入互联网。

用root用户登录,输入yum install gcc-c++,按系统提示,选择y,在安装g++的过程中,如果出现了错误,就尝试多几次。

2、编译C++程序

编译C程序的命令是gcc,编译C++程序的命令是g++,g++命令和gcc命令的用法相同,把gcc改为g++就可以了,我们在学习C语言时写的那些示例程序,基本上都可以用g++来编译。

从C语言到C++语言

C++输入和输出

       在​​C语言​​​中,我们使用 scanf 和 printf 来对数据进行输入输出操作。在​​C++​​语言中,C语言的这一套输入输出库我们仍然能使用,C++增加了cin和cout输入输出库,我不想用它,因为cin和cout对格式化的支持实在是太麻烦。

C++布尔类型(bool)

       C语言并没有彻底从语法上支持“真”和“假”,只是用 0 和非 0 来代表。这点在 ​​C++​​ 中得到了改善,C++ 新增了 bool 类型(布尔类型),它占用 1 个字节长度。bool 类型只有两个取值,true 和 false:true 表示“真”,false 表示“假”。

       bool 是类型名字,也是 C++ 中的关键字,它的用法和 int、char、long 是一样的,可以用=赋值,可以用于函数的参数和返回值。

              bool flag=true;

              if (flag) printf("flag is true");

              else printf("flag is fals");

              flag=false;

              if (flag) printf("flag is true");

              else printf("flag is fals");

C++定义变量的位置

       ANSI C 规定,所有局部变量都必须定义在函数开头,在定义变量之前不能有其他的执行语句。C99标准取消这这条限制,但是某些编译器对C99的支持很不积极,仍然要求变量定义在函数开头,或者只支持一部分。

       取消限制带来的另外一个好处是,可以在 for 循环的控制语句中定义变量。

              int sum = 0;

       // 在for循环的条件语句内部定义变量i

              for(int ii=1; iii<=100 ;ii++)

              total = total + ii;

C++函数的缺省参数

       在C语言中,函数在声明的时候指定参数列表,调用的时候函数参数的个数和数据类型必须与函数声明参数列表相同,但是,在C++中,声明函数的时候,可以为函数指定缺省参数,调用时缺省参数可以不填写。例如:

              int writetofile(FILE *fp,char *strbuf,bool enbuffer=true);

       enbuffer参数表示是否启用缓冲区,writetofile函数被调用的时候,如果只写fp和strbuf参数,不写enbuffer参数,enbuffer参数将缺省为true,例如:

             writetofile(fp,strbuf);

C++动态内存分配

       在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。

       在C++中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete,new 用来动态分配内存,delete 用来释放内存。

重点学习的内容

       1、C++函数重载;

       2、类的基本知识。

       3、vector容器。

       4、引用。

       5、string类。

       6、类的继承。

版权声明