当前位置:  开发笔记 > 编程语言 > 正文

因为C++包含所有东西,所以不需要学习C是真的吗?

如何解决《因为C++包含所有东西,所以不需要学习C是真的吗?》经验,为你挑选了4个好方法。

我正在参加C++编程课程,教授告诉我们没有必要学习C语言,因为C++包含C语言中的所有内容以及面向对象的特性.然而,其他一些人告诉我,这不一定是真的.任何人都可以对此有所了解吗?



1> Brian R. Bon..:

概述:

几乎可以,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++中的不良习惯.预处理程序滥用,不必要地使用原始指针,结构语义只是一些想到的例子.
......你越"老",就越难摆脱这些习惯.
知道如何处理预处理器滥用等事情并不意味着你会使用它.基本上你会用你所知道的最好的方式,知道额外的东西不会伤害你.它将允许您稍后在其他人的代码中检测它并能够自己重构它.

2> denis philli..:

虽然C++的设计目的是为了保持与C的高度兼容性,而你在C++中学到的内容的一部分将适用于C,但心态却完全不同.使用Boost或STL编程C++与使用C语言编程完全不同.

有一个术语称为使用C++作为更好的C.这意味着使用一些C++语言特性和工具来简化C编程(例如,在for语句中声明for循环的索引变量).但是现在,除了大量的语法之外,现代C++开发似乎与C非常不同,在这些情况下,C遗留似乎往往是一种负担而不是一种好处.



3> shoosh..:

如果你知道C++的语法,你可能确实不需要学习C的语法,但是你需要了解C语言中的编码实践与C++中的不同.

所以你的教授并非100%正确.
在C中,您没有将代码排列到逻辑模块中的类,并且您没有C++多态.然而,你仍然需要以某种方式实现这些目标.
虽然C的语法在某种程度上是C++的一个子集,但C语言编程并不是C++ 编程的一个子集.它完全不同.



4> Thomas Padro..:

是的,不是.

正如其他人已经回答的那样,语言C++是语言C的超集,有一些小例外,例如sizeof('x')给出不同的值.

但我不清楚的是,当谈到使用这两种语言时,C++并不是超集,而是不同.C++包含新的(如果它们更好的话可以讨论)做基本事情的方法,比如写入屏幕.旧的C方式仍然存在,但你通常使用新的方式.这意味着一个简单的"hello world"程序在C和C++中看起来不同.因此,简单的事情在C和C++中是相同的并不是真的,然后你只需要在C++中添加更高级的东西,比如支持面向对象的编程.

因此,如果你已经学习了C++,那么在用C语言编程之前,你需要重新学习很多东西.(好吧,有可能教C++作为C的扩展,仍然使用printf和malloc代替iostreams和new,然后添加类和其他C++的东西,但这种使用C++的方式通常是不受欢迎的.)

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有