侵权投诉

详谈C语言和C++的区别和联系

2020-06-29 14:56 次阅读

在学习了C++语言和C++之后,这两者之间的区别我们需要仔细的捋一捋!

一、面向过程语言和面向对象语言

我们都知道C语言是面向过程语言,而C++是面向对象语言,说C和C++的区别,也就是在比较面向过程和面向对象的区别。

1.面向过程和面向对象的区别

(1)面向过程:面向过程编程就是分析出解决问题的步骤,然后把这些步骤一步一步的实现,使用的时候一个一个的依次调用就可以了。

(2)面向对象:面向对象编程就是把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。

举个例子:(玩五子棋)

(1)用面向过程的思想来考虑就是:开始游戏,白子先走,绘制画面,判断输赢,轮到黑子,绘制画面,判断输赢,重复前面的过程,输出最终结果。

(2)用面向对象的思想来考虑就是:黑白双方(两者的行为是一样的)、棋盘系统(负责绘制画面)、规定系统(规定输赢、犯规等)、输出系统(输出赢家)。

面向对象就是高度实物抽象化(功能划分)、面向过程就是自顶向下的编程(步骤划分)

2.面向过程和面向对象的优缺点

在学习一些比较抽象的概念时,由于我们的理解能力很有限,有时候一些比较恰当的例子也是有助于我们学习的,因此对二者的优缺点比较,还是先举例子,后总结吧!

(1)用面向过程写出来的程序就像一份蛋炒饭,也就是米饭和炒的菜均匀的混合在了一起,因此蛋炒饭入味均匀,不会像盖浇饭那样,可能有时候吃的菜多饭少,还有时候菜少饭多。但是如果你不喜欢吃蛋炒饭,只想吃肉炒饭,那么原来做的这份蛋炒饭就得倒掉了,重新做一份肉炒饭,厨师就得辛苦了!

(2)用面向对象写出来的程序就像一份盖浇饭,也就是米饭和盖菜分别做好,将盖菜放在米饭上面,盖浇饭虽然没有蛋炒饭那样入味均匀,但是如果给了你一份土豆丝盖饭,你又不想吃了,换成牛肉盖饭,厨师只需要将米饭上面的土豆丝倒掉,重新做一份牛肉放在上面就好了。

那么到底蛋炒饭和盖浇饭哪个好吃呢?

我觉得各有优劣,谁也不能说到底哪个好,毕竟蛋炒饭的餐馆和盖浇饭的餐馆都很多,而且生意都很不错,存在即为合理!

如果非要将二者进行一个高地的比较的话,那就得先设定一个场景了!

盖浇饭的好处就是”菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用专业术语来说就是”可维护性“较好,”饭” 和”菜”的耦合度比较低。

蛋炒饭将”蛋”“饭”搅和在一起,想换”蛋”“饭”中任何一种都很困难,耦合度很高,以至于”可维护性”比较差。

基于上述的例子,二者的优劣总结如下:

面向过程语言

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

缺点:没有面向对象易维护、易复用、易扩展

面向对象语言:

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护

缺点:性能比面向过程低

二、具体语言的区别

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。

详谈C语言和C++的区别和联系

4.参数列表

在C语言中,函数没有指定参数列表时,默认可以接收任意多个参数;但在C++中,因为严格的参数类型检测,没有参数列表的函数,默认为 void,不接收任何参数。

详谈C语言和C++的区别和联系

5.缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的参。(C语言不支持缺省参数)

详谈C语言和C++的区别和联系

(1)半缺省参数

void FunTest(int _iParam1, int _iParam2 = 0 )

{}

void FunTest(int _iParam1, int _iParam2 = 0 , int _iParam3/* = 0*/)

{}

void FunTest(int _iParam1, int _iParam2 /* = 0*/,int _iParam3 = 0)

{}

(2)全缺省参数

void FunTest(int _iParam1 = 0, int _iParam = 1)

{ }

//注意:慎用缺省函数,否则会产生二义性

void FunTest ()

{}

void FunTest (int a = 10 )

{}

//假如使用不带实参方式调用FunTest()函数时,编译器将不知道调用哪一个,产生二义性

注意:

(1)在半缺省的情况下,带缺省值的参数必须放在参数列表的最后面。

(2)缺省参数不能同时在函数的声明和函数定义中出现,二者只能选其一。

(3)缺省值必须是常量或者全局变量。

(4)缺省参数必须通过值参或常参传递。

6.函数重载

函数重载:函数重载是函数的一种特殊情况,指在同一作用域中,声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数、类型、顺序)必须不同,返回值类型可以相同也可以不同,常用来处理实现功能类似数据类型不同的问题。(C语言没有函数重载,C++支持函数重载)。

详谈C语言和C++的区别和联系

来看个例子:

//下面两个函数算函数重载吗?

void FunTest6()

{ } int

FunTest6()

{

return 0;

}

//答案是不能,因为仅仅返回值类型不同,不能构成重载

收藏 人收藏
分享:

评论

相关推荐

几个常见的Python库资料合集免费下载

对于数值型数据, NumPy数组在存储和处理数据时要比内置的Python数据结构高效得多。此外,由低....
发表于 08-06 17:27 12次 阅读
几个常见的Python库资料合集免费下载

Python标准库中文版资料合集

Python 的标准库包括了很多的模块, 从 Python 语言自身特定的类型和声明, 到一些只用于....
发表于 08-06 08:00 18次 阅读
Python标准库中文版资料合集

谭浩强版C语言程序设计PDF电子书免费下载

C语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。....
发表于 08-06 08:00 22次 阅读
谭浩强版C语言程序设计PDF电子书免费下载

电子工程师成长之教训系列故事(上)终身受用的启发

勤奋真的很重要,特别是年轻人,不轻言放弃,遇事有钻研精神是技术上能有所成就的基本要求。只有亲身经历过....
的头像 电子发烧友网 发表于 08-05 14:52 157次 阅读
电子工程师成长之教训系列故事(上)终身受用的启发

C语言/C++基本语句编程风格

千万留意,无论是float还是double类型的变量,都有精度限制,所以一定要避免将浮点变量用“==....
的头像 玩转单片机 发表于 08-05 11:03 72次 阅读
C语言/C++基本语句编程风格

C语言开发单片机为啥都是全局变量形式?

要成为一个资深的嵌入式工程师相当难,一方面要有非常扎实的理论知识,同时也要有相当的那种大型的、高频C....
的头像 玩转单片机 发表于 08-05 10:35 138次 阅读
C语言开发单片机为啥都是全局变量形式?

单片机初学者都会遇到的10个问题

汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少....
的头像 玩转单片机 发表于 08-05 10:28 81次 阅读
单片机初学者都会遇到的10个问题

C语言指针详解

函数指针,形如: #define PMYFUN (void*)(int,int) ,可以用在大量分支....
的头像 玩转单片机 发表于 08-05 10:17 58次 阅读
C语言指针详解

有没有想过为什么嵌入式开发要使用C语言呢?

新型的单片机,寄存器成百上千,全靠记忆简直天方夜谭,复杂的大型项目不是一个人能完成的,汇编的移植性和....
的头像 玩转单片机 发表于 08-05 10:14 98次 阅读
有没有想过为什么嵌入式开发要使用C语言呢?

采用标准C的强制转换和指针的概念来实现访问MCU的寄存器

总结一下,就是(*(volatile unsigned char *)0x25)可以看作是一个普通变....
的头像 玩转单片机 发表于 08-04 16:44 147次 阅读
采用标准C的强制转换和指针的概念来实现访问MCU的寄存器

Python的特点和基础语法详细说明

Python 已被移植到很多平台,这些平台包括Linux 、Windows 、FreeBSD、Mac....
发表于 07-30 17:53 38次 阅读
Python的特点和基础语法详细说明

超声波测距LCD12864显示的C语言程序和工程文件免费下载

本文档的主要内容详细介绍的是超声波测距LCD12864显示的C语言程序和工程文件免费下载。
发表于 07-30 17:16 33次 阅读
超声波测距LCD12864显示的C语言程序和工程文件免费下载

超声波测距LC1602显示的C语言程序和工程文件

  本文档的主要内容详细介绍的是超声波测距LC1602显示的C语言程序和工程文件。
发表于 07-30 17:16 27次 阅读
超声波测距LC1602显示的C语言程序和工程文件

嵌入式LINUX的Qt开发入门教程详细说明

 关于LINUX 的Qt 开发,你了解多少?它和ARM 的GUI 开发差别有多大?如果你还一头雾水,....
发表于 07-29 11:55 53次 阅读
嵌入式LINUX的Qt开发入门教程详细说明

C语言的拓展归纳总结详细说明

本文档的主要内容详细介绍的是C语言的拓展归纳总结详细说明。
发表于 07-29 08:00 46次 阅读
C语言的拓展归纳总结详细说明

C语言教程之struct结构体的详细资料说明

将多个数据类型组合成一个实体,定义了了结构体,就定义了一个新的数据类型。用简单的类型封装成复杂的类型....
发表于 07-29 08:00 31次 阅读
C语言教程之struct结构体的详细资料说明

C语言动态链表的详细资料说明

  动态链表:在程序执行的过程中,动态地开辟一块内存空间,可以是不在一起的内存空间,通过链表联系起来....
发表于 07-29 08:00 28次 阅读
C语言动态链表的详细资料说明

C语言空间开辟的教程资料说明

本文档的主要内容详细介绍的是C语言空间开辟的教程资料说明1.系统自动分配内存空间的变量 不使用关键....
发表于 07-29 08:00 37次 阅读
C语言空间开辟的教程资料说明

C语言的声明和定义与引用说明

本文档的主要内容详细介绍的是C语言的声明和定义与引用说明
发表于 07-29 08:00 34次 阅读
C语言的声明和定义与引用说明

C语言的扩展资料说明

编译器不能定义编程中所有的东西,可以提供规则让程序员定义自己的东西
发表于 07-29 08:00 28次 阅读
C语言的扩展资料说明

C语言数组的学习教程说明

同样我们在程序中也需要容器,只不过该容器有点特殊,它在程序中是一块连续的,大小固定并且里面的数据类型....
发表于 07-29 08:00 20次 阅读
C语言数组的学习教程说明

了解一些C程序的基本规则

程序由一个或多个函数组成,其中一定有一个名为 main()的函数。函数的描述由函数头和函数体组成。函....
的头像 lhl545545 发表于 07-27 11:01 237次 阅读
了解一些C程序的基本规则

内存受限系统之软件开发PDF电子书免费下载

PDA软件市场不但巨大,而且持续成长。五年之内,全世界将有大量人口使用精明时髦,可上网的移动电话。每....
发表于 07-27 08:00 13次 阅读
内存受限系统之软件开发PDF电子书免费下载

如何实现电子密码锁的设计

根据设定好的密码,采用二个按键实现密码的输入功能,当密码输入正确之后,锁就打开,如果输入的三次的密码....
的头像 Wildesbeast 发表于 07-26 10:35 408次 阅读
如何实现电子密码锁的设计

设计一个多路多功能的智力竞赛抢答器资料说明

我们为适应高校等多代表队单位活动的需要一个多路抢答器设计 ,讲述了电路各部分的设计及功能 ,并说明了....
的头像 Wildesbeast 发表于 07-26 10:34 370次 阅读
设计一个多路多功能的智力竞赛抢答器资料说明

请问自学汇编语言汇编语言需要什么?

    学过C语言和Java 学过51单片机, 现在想学习ARM 汇编语言 嵌入式系统Linux 这几个 有什么相关的视频或...
发表于 07-26 08:03 0次 阅读
请问自学汇编语言汇编语言需要什么?

自学C语言的好方法有哪些?

    计算机小白一枚,自学C语言中。但目前还很不熟练。碰到书上稍微比较难的例子,不看答案自己去思考的话,脑子就一...
发表于 07-26 08:03 0次 阅读
自学C语言的好方法有哪些?

DSP的设计与实现详细说明

本课程主要结合TMS320C54X、TMS320LF240X两个系列DSP介绍DSP的相关结构原理、....
发表于 07-24 17:31 53次 阅读
DSP的设计与实现详细说明

强大的Python完全用Python工作使用说明

作为一个业余物理工作者以及入门计算机使用者, 选择一门称手的编程语言是非常重要的事。 从计算能带, ....
发表于 07-24 16:51 48次 阅读
强大的Python完全用Python工作使用说明

Effective C++改善程序与设计的55个具体做法第三版电子书

《Effective C++:改善程序与设计的55个具体做法》(中文版)(第3版)一共组织55个准则....
发表于 07-24 08:00 32次 阅读
Effective C++改善程序与设计的55个具体做法第三版电子书

电力电子应用技术的MATLAB仿真破PDF电子书免费下载

本书概述了MATLAB软件及其图形仿真界面Simulink的基础应用知识,详细介绍了用于电力电子仿真....
发表于 07-23 08:00 80次 阅读
电力电子应用技术的MATLAB仿真破PDF电子书免费下载

实现光敏和热敏电阻实验的C语言程序和电路图与数据手册等资料

本文档的主要内容详细介绍的是实现光敏和热敏电阻实验的C语言程序和电路图与数据手册等资料。
发表于 07-21 08:00 42次 阅读
实现光敏和热敏电阻实验的C语言程序和电路图与数据手册等资料

使用C#实现Interlocked线程同步的程序免费下载

本文档的主要内容详细介绍的是使用C#实现Interlocked线程同步的程序免费下载。
发表于 07-21 08:00 19次 阅读
使用C#实现Interlocked线程同步的程序免费下载

单片机用什么编程

单片机编程用汇编和C语言的比较多。其中C语言属于比较常用比较基础的语言,很多人大学期间都学,也相对比....
发表于 07-20 09:45 102次 阅读
单片机用什么编程

使用C#实现Gettype和类的typeof反射获取实例的详细说明

本文档的主要内容详细介绍的是使用C#实现Gettype和类的typeof反射获取实例的详细说明 ....
发表于 07-20 08:00 36次 阅读
使用C#实现Gettype和类的typeof反射获取实例的详细说明

Python计算机视觉编程的PDF电子书免费下载

本书是计算机视觉编程的权威实践指南,依赖 Python 语言讲解了基础理论与算法,并通过大量示例细致....
发表于 07-20 08:00 41次 阅读
Python计算机视觉编程的PDF电子书免费下载

C语言的几种位操作运算程序详细说明

在汇编语言中有直接对位进行操作的指令,如置位、复位、位取反、测试某一位等,这对于硬件操作十分方便,在....
的头像 Wildesbeast 发表于 07-18 12:00 474次 阅读
C语言的几种位操作运算程序详细说明

单片机的95个问题详细解答

关于单片机的N多问题1. C语言和汇编语言在开发单片机时各有哪些优缺点?答:汇编语言是一种用文字助记....
的头像 Wildesbeast 发表于 07-18 10:10 835次 阅读
单片机的95个问题详细解答

C语言是如何控制硬件的?

    提到C语言就会想到单片机编程,像java python 这些就是纯软件编程语言,不会和硬件打交道。为什么C可以和硬件打...
发表于 07-18 08:06 1次 阅读
C语言是如何控制硬件的?

C语言版cla的程序中可以使用局部变量吗?

interrupt void Cla1Task1(void) [    int i;    for (i=0; i...
发表于 07-17 14:53 0次 阅读
C语言版cla的程序中可以使用局部变量吗?

一款同步Redis数据的异地机房同步数据程序和工程文件

Redis即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志....
发表于 07-17 08:00 39次 阅读
一款同步Redis数据的异地机房同步数据程序和工程文件

51单片机汇编语言程序设计的学习课件资料概述

MCS-51单片机的编程语言可以是汇编语言也可以是高级语言(如C语言),高级语言编程快捷,但程序长,....
发表于 07-16 15:50 47次 阅读
51单片机汇编语言程序设计的学习课件资料概述

单片机汇编语言和C语言的特点

单片机是一种可编程器件,单片机的出现使硬件设计变得更为简单,产品的功能也更强大,而程序就是单片机的灵....
发表于 07-15 17:29 68次 阅读
单片机汇编语言和C语言的特点

C语言的编程规范详细概述

今天人们越来越明白软件设计更多地是一种工程而不是一种个人艺术由于大型产品的开发通常由很多的人协同作战....
发表于 07-15 17:29 44次 阅读
C语言的编程规范详细概述

如何快速有效的学习单片机

学习单片机需要具备一定的电路基础、数字电路、模拟电路、信号系统、C语言编程等相关的基础知识。单片机的....
发表于 07-15 17:26 104次 阅读
如何快速有效的学习单片机

如何给C语言增加几个位操作函数

在汇编语言中有直接对位进行操作的指令,如置位、复位、位取反、测试某一位等,这对于硬件操作十分方便,在C语言中尽管也提供了...
发表于 07-14 18:15 136次 阅读
如何给C语言增加几个位操作函数

C语言的几种位操作运算

在汇编语言中有直接对位进行操作的指令,如置位、复位、位取反、测试某一位等,这对于硬件操作十分方便,在C语言中尽管也提供了...
发表于 07-14 18:14 127次 阅读
C语言的几种位操作运算

嵌入式软件开发ARM中断实验的报告资料说明

一、实验目的(1)、学会使用 Embest IDE 编写简单的 C语言程序并进行调试;(2)、了解不....
发表于 07-14 16:42 44次 阅读
嵌入式软件开发ARM中断实验的报告资料说明

单片机C语言延时程序的注意事项

标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。这在汇编语....
发表于 07-14 11:13 74次 阅读
单片机C语言延时程序的注意事项

单片机C语言代码编写技巧

下面发一些我在网上看到的单片机C语言代码编写技巧和自己的一些经验来和大家分享;
发表于 07-14 11:02 112次 阅读
单片机C语言代码编写技巧

C语言的进阶学习课件资料合集

本文档的主要内容详细介绍的是C语言的进阶学习课件资料合集包括了:第1节-数据的存储,第2节-指针的进....
发表于 07-14 08:00 54次 阅读
C语言的进阶学习课件资料合集

Keil uVision4的使用详解教程概述

单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为 CPU 可以执行的机器码有....
发表于 07-13 08:00 60次 阅读
Keil uVision4的使用详解教程概述

分享 郭天祥 十天学会C语言和51单片机视频教程+代码

郭天祥 郭天祥 十天学会C语言和51单片机 详细教程源码 回复可得 链接:https://pan.baidu.com/s/1uWWpG-o_EVscRZ3ys...
发表于 07-12 21:31 298次 阅读
分享 郭天祥 十天学会C语言和51单片机视频教程+代码

如何把C++的源程序改写成C语言

由于C++解释器比C语言解释器占用的存储空间要大500k左右。为了节省有限的存储空间,降低成本,同时也为了提高效率,将用C+...
发表于 07-11 09:34 1912次 阅读
如何把C++的源程序改写成C语言

关于ARM的三种中断调试方法介绍

在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,....
发表于 07-10 16:01 71次 阅读
关于ARM的三种中断调试方法介绍

使用C语言写出的九九乘法表

本文档的主要内容详细介绍的是使用C语言写出的九九乘法表资料合集免费下载。
发表于 07-10 08:00 46次 阅读
使用C语言写出的九九乘法表

C语言之结构体的声明与定义

我们刚刚申请了一个名叫Info的结构体类型,那么理论上我们可以像声明其他变量的操作一样,去声明我们的....
的头像 玩转单片机 发表于 07-09 09:06 315次 阅读
C语言之结构体的声明与定义

如何把C++的源程序改写成C语言

由于C++解释器比C语言解释器占用的存储空间要大500k左右。为了节省有限的存储空间,降低成本,同时也为了提高效率,将用C+...
发表于 07-08 20:51 404次 阅读
如何把C++的源程序改写成C语言

HW资料华-为硬件(硬件开发C语言PCB设计天线通信)

链接:https://pan.baidu.com/s/1HFxkb4O1jAZvCEccWVcd4w 提取码:stns 回复可见提取码,资源需求可加q1051514663 ...
发表于 07-01 18:20 97次 阅读
HW资料华-为硬件(硬件开发C语言PCB设计天线通信)