关于C和C++区别的讨论

简介:
谈点我个人的看法哈,一家之言,欢迎拍砖。 
我个人理解,这二者其实没有太大差异性。 
C语言面向过程,OP,C++语言面向对象,OO。 
但实际上大家可能能关注到,不管如何OO,如何划分类和对象,但是,具体到一个功能,还是要用函数来实现,不管如何写程序,到了函数内部,其实还是那些if、for、while等等语句,还是面向过程的。 
所以,我和我的同事,平时并不会明显去分辨C和C++的异同,在我们看来,二者本来就是一体的。 
其实这个世界上,完全的OO是不存在的,当我们实现一个功能的时候,很多时候,就是界定一些数据,针对数据添加一些处理流程,获得一个结果,这件事情,本质上就是个过程。 
但C++还是很有用的。 
因为很多年以前,大家觉得传统面向过程的语言,如C,如Basic,如Pascal,都有一个缺点,就是在程序中,彼此暴露了太多的细节,这造成各个功能之间,由于程序员的失误,很容易发生粘连,联系。换而言之,就算是非法访问,通常也是合法而成功的,不会被编译器检查出来。比如C就允许全局变量和远指针调用。 
这在开发大型系统的时候,就出现了bug率居高不下,大型工程项目很难完成的缺点。 
正是因为此,大家在上世纪七十年代,提出了模块化开发的思想,试图通过各个模块的独立开发和运行,强行阻断各个模块不必要的耦合性,来达到让程序稳定的目的。 
但这样毕竟是人工在操作,是人做的,就可能会犯错误,大家觉得有必要在编译器这一级,要强调模块之间的独立性。 
这个时候,大家经过分析,发现程序其实核心是和数据打交道的,一个数据,业务上只要界定了用途,基本上,可能的访问方法就确定得差不多了,那么,我们有没有可能,把一类数据,以及其方法,从编译器的角度区别开来,构建独立模块,外部模块仅能访问到它允许访问的方法,其他的方法,全部报错,拒绝编译呢? 
答案是当然可以。大家就这么做了。那么,我们看看,一类数据和其允许的方法的集合,就是对象啦,在这个思想上,OO,面向对象的思想就产生了。 
最初,这个语言是一个新的语言,好像叫smalltalk吧,不过,这个时候的语言,还是实验室产品,没有投入商业运营。 
但这个时候,市场上,由于UNIX的推动,C语言基本上已经一统天下了。很多人都学的C语言,让大家去学习一门新语言,尤其是开发思路完全不同的语言,是不可想象的,成本太高。大家就想,能不能折中一下,以C的语法为蓝本,开发一套OO的语言,C++就这么诞生了。 
其实OP到OO,C到C++,本质上讲,就是一个数据私有化的过程。甚至整个语言的发展史,也是一个数据私有化的过程。如汇编语言,其实是没有私有数据的,所有的内存都可以被访问。 
人们通过编译器的界定和完善,逐渐实现数据私有化,最终的目标就是实现一个软件系统内部各个模块之间,高内聚,低耦合的目标,最终保证程序员的产品质量,进而提高生产率。 
至于后面的泛型编程,多态,继承等等,无非是在这条路上继续了一步而已,当然,也是为了尽量减少程序员的代码输入量,进一步提升生产效率而已。 
所以,从数据组织上讲,C++比C先进了一大步,但从功能实现上讲,C++和C并无本质不同。C++到现在,都不是一种完全的面向对象语言,因为它都仍然保留了全局变量。 
所以我的意见,两个一起学,不要刻意去区分,好像用C就要用纯C,没必要。 

我们工程中,系统级的模块组织,一般式C++的对象,每个单步功能,流程的实现,我们都是C的函数,仅仅是放在类里面而已。

本文转自tonyxiaohome 51CTO博客,原文链接:http://blog.51cto.com/tonyxiaohome/198740 ,如需转载请自行联系原作者

相关文章
|
5月前
|
存储 C++ Cloud Native
云原生部署问题之C++ 中的 nullptr 和 NULL 区别如何解决
云原生部署问题之C++ 中的 nullptr 和 NULL 区别如何解决
62 0
|
2月前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
6月前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
78 1
|
2月前
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
59 10
|
2月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
23 0
|
4月前
|
存储 编译器 C语言
C++内存管理(区别C语言)深度对比
C++内存管理(区别C语言)深度对比
85 5
|
5月前
|
Web App开发 Rust 分布式计算
Rust与C++的区别及使用问题之对于大量使用C++实现的产品来说,迁移到Rust的问题如何解决
Rust与C++的区别及使用问题之对于大量使用C++实现的产品来说,迁移到Rust的问题如何解决
|
5月前
|
Rust 安全 编译器
Rust与C++的区别及使用问题之Rust中的bound check对性能产生影响的问题如何解决
Rust与C++的区别及使用问题之Rust中的bound check对性能产生影响的问题如何解决
|
5月前
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
|
4月前
|
缓存 C++ Windows
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别
Inno setup 脚本判断 Microsoft Visual C++ Redistributable 不同版本区别