关于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 ,如需转载请自行联系原作者

相关文章
|
1月前
|
存储 算法 C++
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
【C/C++ Vector容量调整】理解C++ Vector:Reserve与Resize的区别与应用
52 1
|
1月前
|
C++ 容器
c++ STL 之 vector 的 capacity 和 size 属性区别
c++ STL 之 vector 的 capacity 和 size 属性区别
33 0
|
1月前
|
存储 Java 编译器
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析
98 0
|
1月前
|
编译器 C++ Python
【C/C++ 泡沫精选面试题02】深拷贝和浅拷贝之间的区别?
【C/C++ 泡沫精选面试题02】深拷贝和浅拷贝之间的区别?
32 1
|
3月前
|
Java 编译器 C++
Java开发和C++开发有什么区别
Java开发和C++开发有什么区别
|
30天前
|
算法 编译器 程序员
深入理解C++编译模式:了解Debug和Release的区别
深入理解C++编译模式:了解Debug和Release的区别
62 2
|
1月前
|
算法 编译器 C++
【C++ 概念区分】C++ 中覆盖,重写,隐藏 三者的区别
【C++ 概念区分】C++ 中覆盖,重写,隐藏 三者的区别
19 0
|
1月前
|
编译器 测试技术 调度
C++ 中 template<class T>和template<typename T>的区别
C++ 中 template<class T>和template<typename T>的区别
11 0
|
1月前
|
编解码 Unix Linux
【Linux C/C++ 延时(延迟)函数比较】介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
【Linux C/C++ 延时(延迟)函数比较】介绍Linux系统中常用的延时函数sleep、usleep、nanosleep、select和std::sleep_for()的区别和使用场景
47 1
|
1月前
|
安全 Unix Linux
【C/C++ 字符串】探索C语言之字符串分割函数:strtok和strsep的区别
【C/C++ 字符串】探索C语言之字符串分割函数:strtok和strsep的区别
15 0