我正在参加C++编程课程,教授告诉我们没有必要学习C语言,因为C++包含C语言中的所有内容以及面向对象的特性.然而,其他一些人告诉我,这不一定是真的.任何人都可以对此有所了解吗?
概述:
几乎可以,C++是C的超集,而你的教授是正确的,因为不需要单独学习C语言.
C++增加了整个面向对象的方面,通用编程方面,以及不太严格的规则(比如需要在每个函数的顶部声明变量).C++确实改变了C中某些术语的定义,例如结构体,尽管仍然是超集方式.
为什么它不是严格的超集的例子:
这篇维基百科的文章有几个很好的例子:
一个常见的区别是C允许从void*到其他指针类型的隐式转换,但C++没有.所以,以下是有效的C代码:
int *i = malloc(sizeof(int) * 5);...但要使其在C和C++中都能工作,需要使用显式强制转换:
int *i = (int *) malloc(sizeof(int) * 5)另一个常见的可移植性问题是C++定义了许多新关键字,例如new和class,它们可以在C程序中用作标识符(例如变量名).
这篇维基百科文章也有进一步的分歧:
C++编译器禁止goto进行初始化,如下面的C99代码所示:
void fn(void) { goto flack; int i = 1; flack: ; }
你应该先学习什么?
你应该首先学习C++,不是因为首先学习C会伤害你,不是因为你必须忘记任何事情(你不会),而是因为首先学习C没有任何好处.你最终将学习关于C的所有内容,因为它或多或少都包含在C++中.
虽然C++的设计目的是为了保持与C的高度兼容性,而你在C++中学到的内容的一部分将适用于C,但心态却完全不同.使用Boost或STL编程C++与使用C语言编程完全不同.
有一个术语称为使用C++作为更好的C.这意味着使用一些C++语言特性和工具来简化C编程(例如,在for语句中声明for循环的索引变量).但是现在,除了大量的语法之外,现代C++开发似乎与C非常不同,在这些情况下,C遗留似乎往往是一种负担而不是一种好处.
如果你知道C++的语法,你可能确实不需要学习C的语法,但是你需要了解C语言中的编码实践与C++中的不同.
所以你的教授并非100%正确.
在C中,您没有将代码排列到逻辑模块中的类,并且您没有C++多态.然而,你仍然需要以某种方式实现这些目标.
虽然C的语法在某种程度上是C++的一个子集,但C语言编程并不是C++ 编程的一个子集.它完全不同.
是的,不是.
正如其他人已经回答的那样,语言C++是语言C的超集,有一些小例外,例如sizeof('x')给出不同的值.
但我不清楚的是,当谈到使用这两种语言时,C++并不是超集,而是不同.C++包含新的(如果它们更好的话可以讨论)做基本事情的方法,比如写入屏幕.旧的C方式仍然存在,但你通常使用新的方式.这意味着一个简单的"hello world"程序在C和C++中看起来不同.因此,简单的事情在C和C++中是相同的并不是真的,然后你只需要在C++中添加更高级的东西,比如支持面向对象的编程.
因此,如果你已经学习了C++,那么在用C语言编程之前,你需要重新学习很多东西.(好吧,有可能教C++作为C的扩展,仍然使用printf和malloc代替iostreams和new,然后添加类和其他C++的东西,但这种使用C++的方式通常是不受欢迎的.)