C++是直接从C语言发展过来的没错,但最初这种语言不是叫C++,而是C with class,这是由于当时C语言在编程界居于老大的地位,要想发展一种新的语言,最强大的竞争对手就是C语言,所以当时有两个问题最受关注:C++要在运行时间、代码紧凑性和数据紧凑性方面能够与C语言相媲美,但是还要尽量避免在语言应用领域的限制。在这种情况下,一个很自然的想法就是让C++从C语言继承过来,但是Bjarne博士更具有先见之明,他为了避免受到C语言的局限性,参考了很多的语言,例如:从 Simula继承了类的概念,从Algol68继承了运算符重载、引用以及在任何地方声明变量的能力,从BCPL获得了//注释,从Ada得到了模板、名字空间,从Ada、Clu和ML取来了异常。
所以C++不是C的延伸,而是几乎完全不同的东西,C是面向过程的,C++是面向对象的,两者根本不具有可比性,相同的只是C++保持了C语言的表示形式和优美。
至于C#,它是为生成在 .NET Framework 上运行的应用程序设计的。C# 简单、功能强大、类型安全,而且是面向对象的。C#同样保持了C语言的表示形式和优美。
想学好C++,非学C不可!!!
C++与C有什么不同呢?我们现在一步步地来分析一下
一、类,类我并不说它有什么不好,但是对于初学者,它是一个累赘。类的封装使得初学者对程序产生厌倦,感到不适和麻烦。
二、引用,引用是C++中最臭屁的东西了,最好尽量不要用它,我就是从来不用引用,除非万不得已。引用对于初学者就更容易产生混淆,不知道哪个是引用,哪个是变量。
三、函数的重载,初学者学函数的重载好像没什么坏处,但是,这会使初学者潜意识里对C语言的变量类型的重要性产生淡化,要记住C语言是对变量类型最敏感了的,变量的类型在C语言里的重要性是不言而喻的。
四、流操作符,和上面同样的道理,使得对变量类型的重要性产生淡化,况且,cin这个东东有点儿不怎么方便,有时会产生使初学者莫名其妙的结果。
五、操作符重载,典型的高级应用,初学者可能根本用不着,这个东东会让他们觉得C++很难,门槛高,看不懂…………。
六、继承,以及虚函数,典型的模仿四不象,这种狗屁东西除了看起来深奥,实用价值很低………………。我怎么可能把某个类的类型的指针去指向另一个不同类型但是是继承关系的类,来实现什么动态联编。
误区:
C++是面向对象化的而C是面向过程化的?
:第二对,第一问错,C++并非完全面向对象化,真正的面向对象化的语言恐怕只有Java才算得上。
C++能实现C所不能的功能吗?
:至少我还没有发现……
学了C再学C++有障碍吗?比如程序设计思想……
:至少我还没有看见谁有此症状。
学了C再学C++又要重头开始吗?
:不,C++下可以实现C语言的一切功能。
我学完了C一定还要学C++才能编程吗?
:完全没必要。
C++比C好在哪里?
:更加符合软件工程学