(重点部分,序号用加粗斜体标出)
发展过程:C—→ C++—→ Java
但C++是对C语言的扩充和延伸,并且对C语言提供后向兼容的能力。二者在语法上,90%都是相似的。
一、
- 不同的程序思维:C语言是面向过程的,而C++是面向对象的。C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
面向过程:分析出解决问题的步骤,然后把这些步骤一步一步的实现,使用时一个一个的依次调用。程序员面对的是函数函数和变量。
面向对象:把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。程序员面对的是对象,对象又分为两部分,数据(用于保存对象的属性)和方法(用于完成对数据的操作)。对象和对象之间通过消息进行通信。
面向对象就是高度实物抽象化(功能划分)、面向过程就是自顶向下的编程(步骤划分)
(如包包子:
面向过程——开始包,擀好包子皮,用筷子/勺子挖馅料,把馅料放到包子皮中,用手捏好,在包子底部沾一些面粉,把包子放到盖帘上。
面向对象——人,包包子的工具,包包子的材料,包包子的方法,结果(包好多少个什么馅料的包子))
C++不能看做带类的C,它带来的是思考和解决问题角度的转变。 - C语言可以写很多方面的程序,但是C++可以写得更多更好,C++可以写基于DOSr程序,写DLL,写控件,写系统。
- C语言对程序的文件的组织是松散的,几乎是全要程序处理;而c++对文件的组织是以工程,各文件分类明确。
4. C++ 只有一个名字空间,而C语言中“结构标志”有独立的名字空间。
名称空间是C++的特性,用于编写大型程序时组织代码
C++代码,头文件之后必备语句:
using namespacec std;
std意为standard,标准命名空间
- C和C++中都有结构的概念,但是在C语言中结构只有成员变量,而没成员方法,而在C++中结构中,它可以有自己的成员变量和成员函数。但是在C语言中结构的成员是公共的,什么想访问它的都可以访问;而在VC++中它没有加限定符的为私有的。
二、
1.关键字不同
C99有32个关键字,C++98有63个关键字
一些关键字的细微区别:
(1)struct:在C语言中struct定义的变量中不能有函数,而在C++中可以有函数。
(2)malloc :malloc函数的返回值为void*,在C语言中可以赋值给任意类型的指针,在C++中必须强制类型转换,否则报错。
(3)struct和class:class是对struct的扩展,struct默认的访问权限是public,而class默认的访问权限是private。
2.后缀名不同
C源文件后缀.c,C++源文件后缀.cpp,在VS中,如果在创建源文件时什么都不给,默认是.cpp。
3.返回值
C语言中,如果一个函数没有指定返回值类型,默认返回int类型;C++中,如果一个函数没有返回值则必须指定为void。
4.参数列表
在C语言中,函数没有指定参数列表时,默认可以接收任意多个参数;但在C++中,因为严格的参数类型检测,没有参数列表的函数,默认为 void,不接收任何参数。
5.缺省参数
缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的参。(C语言不支持缺省参数)
6.函数重载
函数重载:函数重载是函数的一种特殊情况,指在同一作用域中,声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,返回值类型可以相同也可以不同,常用来处理实现功能类似数据类型不同的问题。(C语言没有函数重载,C++支持函数重载)。
三、语法上的区别
1.头文件
2.结构体struct
C++: C++的struct成员包含成员函数
C: C语言的struct的成员只能是数据,不支持函数,因此若要定义结构体的函数需要使用函数指针实现
3.动态数组的创建与删除
以一维和二维动态数组为例:
C++
创建: 使用new自动为动态数组分配空间
删除: 使用delete为动态数组释放内存
C
创建: calloc为动态数组分配空间
删除: free()为动态数组释放内存
4.函数顺序问题
C++中,写在前面的函数可以直接调用写在后面的函数
C中,被调用的函数需要写在调用函数之前
5.类(class)
类是C++引入的类型,可以包含数据,也可以包含函数,解决了C语言struct只能包含数据的缺陷。struct默认public,而class默认private
6.关于for
for(int i=0;i<9;i++)
C99标准之前的C标准不支持for中定义临时变量,该写法出错。C99标准支持。
需要注意的是,部分编译器不能支持C99标准(如Visual C++6.0),或者默认C89模式进行编译执行。
v3.0以上的gcc 的编译器默认按C89编译。设置按C99标准编译:
-std=c99
CodeBlocks(使用gcc编译器):settings →compiler and debugger →Global compiler settings →Other options,添加上述命令。
7.注释风格
C风格为 /* */
C++风格为//
二者可通用
8.布尔变量
C语言 _Bool
C++ bool
9.STL
C++中的STL(Standard Template Library)标准模板库包含很多函数。
c++标准程序库中,隶属于 STL 的占到了 80%以上。
10.输入输出
C++中有cin和cout
stdio.h是C的标准I/O库,是以函数的方式向buffer(缓冲区)写入或读取字符。
iostream是C++的标准I/O库,引入了输入/输出流的概念,是一个类库,是以类方法从streambuf中读取,写入字符。
关于调试程序
啊哈哈哈,bug来喽——
这debug,多是一件美事啊——
对于一些语法错误,在程序运行后编译器报错时,可以根据编译器的报错找到出错行检查。
一些编译器不会报错的错误:scanf忘记写&、==(等于号)与=(赋值号)混用等等。
Debug前提:程序编译,结果无报错。
1.手动加一些代码进行调试
通常是输出变量的值,通过对值的观察来推断代码出现的问题。方法是:在变量发生变化的地方,在之后通过printf、cout之类的语句,输出变量,运行程序,得到变量在程序运行过程中发生的变化,进行推断。
2.Dev C++调试程序
解决打开debug后闪退的问题
工具 →编译选项,编译器设置改为63位/32位的Debug版(即结尾为Debug)。
代码生成/优化 连接器,将“产生调试信息”改为Yes →确定。
调试次数
1个断点:代码会从断点行运行调试至代码结束。
≥2个断点:则会分段调试。
进行Debug
-
工具 → 环境选项 → 基本~浏览Debug变量,选中“查看鼠标指向的变量” → 确定
-
在代码行序号位置单击选中断点,表明程序执行到该行的上一行。
-
上方选择紫色对号(调试)。程序中scanf或cin等表输入的代码,则出现运行程序框,需要手动输入值。
-
在代码中设置需要跟踪变化的变量
方法1:断点行中,选中一个变量,右键 → 添加查看,左侧的调试区域将显示变量的值。 -
方法2:下面的调试栏中,添加查看 →输入变量名。
-
在下方点击“下一步”,蓝色行进行移动,表示当前程序执行到了标记结束位置(标记断点行的上一行)。
断点可以不止一个。
debug结束后记得把编译器改回原来的设置。