如何从c语言过渡到c++呢?

如题所述

第1个回答  2022-11-07
题主用c刷了某oj官方提供的题单,对c语言有了一点点的掌握。请问如何高效地过渡到c++呢?(这里指的过渡不是c with class)

推荐一本书 The C++ Annotations . C 语言向 C++ 过渡, 讲的超细.

有一点不太理解, 虽然 C++ 肯定不是 C with class, 不过, 我觉得这样过渡挺好的. C -&> C with Class -&> C++.

另外, C++ 永远大多时候避免不了高性能需求, 摆脱 C 是挺难的, 所以感觉没办法像学习其他语言一样, 完全当成一门全新的语言去学习.

《c++ primer》这本书就比较适合。

C的东西相比于C++太少了……

建议在C基础下从头开始学C++

从new一对象开始

C++是在c的基础上增加了一些特性和机制,这些特性和机制是为了面向对象而服务的。而c语言的编程主要是面向过程的。

如果要从c转到C++,那就需要学习面向对象思维,学习如何用C++的方法去实现面向对象的编程。主要还是思维的转变。

如何做到思维的转变,可以通过学习面向对象的设计原则和设计模式来达到思维的转变。

刘汝佳的紫书不是有cpp的内容。对着上面的cpp部分学就行。

起码演算法题够用(小声)

c语言过渡到c++主要涉及下面几方面

头文件与命名空间

C语言没有命名空间的概念,而C++有,最典型的是初学时经常用到的using namespace std; 代表使用命名空间std,或者使用std::functuion(); ,即函数、变数名前面加上空间名和域解析符来使用命名空间。命名空间可以嵌套定义。

为了统一,C++会把C语言的stdio.h math.h string.h 等xxx.h格式的标准头文件用 cstdio cmath cstring 等cxxx格式的C++头文件来替代,从而保留了C语言的标准库函数。

输入输出

C语言常用的是scanf printf 的函数,C++用的是cin cout 对象。C语言的方式更快而且格式控制更方便,而C++的方式能够自动识别了输入输出的类型,自动转换成合适的字元串。

bool 类型

C++用于判断真与假的类型,其大小并没有被规定。C++还有true false 关键字。

当然C语言也可以通过各种方式来定义和使用true和false,但不像C++那样作为关键字,没有C++来的可靠。比如 if(func() == true)就是危险的行为。

string 类型

C++语言处理字元串的类,相比于时刻需要注意越界和』』的字元数组,显然更好用。由于构造函数的存在,char *类型的变数很容易构造出string类型。

当需要使用字元数组时,string类型也有相应的c_str函数。 不过注意函数返回的是临时的常指针,如果需要对其修改,需要用strcpy()等函数复制出副本,再对副本操作。

const

C语言中的const代表该变数初始化之后,只能读不能改。但是并不代表每次取值都是一样的,因为还可以通过其他方式修改变数。就像只读方式打开文件一样,你不能对他修改,但是如果这个文件可以被其他人修改,你就不能保证每次读到的内容是一样的。

C++对const的处理更加复杂,假如你用const定义了一个常量var,那么它会被认为是一个常量,哪怕对应地址的内容被强行修改了,访问var时仍然得到的是修改前的内容。

变数定义位置

C语言中的C89标准规定,在代码块里执行语句不能出现在变数定义语句之前。但是C++没有这个限制,只要变数被使用时已经被声明或定义即可。

动态内存管理

C语言只能用malloc等函数开辟一块堆内存,其大小需要计算,返回的指针需要类型转换,内容需要手动去初始化。

而C++申请堆内存的时候可以调用构造函数,释放时能使用析构函数,更方便更安全。

类型转换

C语言可以用小括弧进行类型转换。最常见的是malloc函数返回指针的类型转换。

C++的类型转换更加清晰严格,有四种 const_cast static_cast dynamic_cast reinterpret_cast

而且对于类来说,可以自定义类型转换的函数。

默认参数与函数重载

C语言不支持默认函数和函数重载,需要定义更多的函数名。

C++支持默认参数和函数重载,可以大大减少工作量。

指针与引用

C++中,引用的指向不能改变,所以很多情况下C++引用能够代替指针。

空指针

C语言有NULL宏,用于标记空指针

C++有nullptr关键字。c++不允许直接将void*隐式的转化为其他类型,nullptr的类型为nullptr_t,能够隐式的转换为任何指针,所以用空指针就尽可能的使用nullptr。

智能指针

C++不同标准下定义了许多智能指针,用于自动回收不需要的动态内存,这一点比C语言中的指针方便。
1.C和C++的区别: C语言可以在C++编译器上完美运行,即C属于C++ C++比C多出来一些函数库 C++是面向对象编程(即有class以及相关工具) 2.如何从C过渡到C++
2.1 代码实例: (C语言版)uva11000.

#include& int main() { long long m = 0, fm = 1, sum = 1; int n,i; while(scanf("%d",n),n != -1){ m = 0, fm = 1, sum = 1; for(i = 0;i &< n;i++){ fm = m + 1; m = sum; sum = m + fm; } printf("%lld %lld ",m,sum); } return 0; }

重点不在于解上面这题,请将重点放在写法。以上是C语言写法,为什么说是C语言写法呢?因为上述代码有几个C独有的特点:
第1行:#include& 第5行:scanf("%d",n) 第13行:printf("%lld %lld ",m,sum);
这三点也是C和C++最基本的区别,下面看C++版本:

#include& using namespace std; int main() { long long m = 0, fm = 1, sum = 1; int n,i; while(cin &>&> n,n != -1){ m = 0, fm = 1, sum = 1; for(i = 0;i &< n;i++){ fm = m + 1; m = sum; sum = m + fm; } cout &<&< m &<&< " " &<&< sum &<&< endl; } return 0; }
第1行:#include& 第2行:using namespace std; 第6行:cin &>&> n; 第14行:cout &<&< m &<&< " " &<&< sum &<&< endl; 其中第1行头文件iostream,和C语言中的stdio.h类似,可以对比理解。 第2行的using namespace std 的意思是声明使用命名空间std。可以不深入理解,只要写C++就敲这一行就可以了。(想了解的直接百度就可以,很简单) 第6行:cin全名叫 标准输入流。和C语言中的scanf用法类似,只是它用起来更为方便(大多数情况下),不需要区分不同的类型用不同的写法,所有类型只需要用cin &>&> (变数名)就可以了。 第14行:和cin类似,cout是标准输出流,与C中的printf类似,但是它也不用区分不同的类型用不同输出符号,不管什么类型只要用cout &<&< (变数名) 就可以了。其中endl相当于C语言中的 『 』 换行符。
2.2 初步掌握C++:

如果你已经明白上面4个C++的特点的话,那现在你用C编写代码有多顺畅你用C++就可以同样顺畅了。因为其他写法(for、if、else……)和C完全相同。
3.如何利用C++的优点(提高):
一开始就提到,C++和C的不同在于C++丰富的函数库,其中最方便的是STL(一个库名)。很多书会讲这一个库单独拿出来讲,其中包括一些非常方便的容器(vector、map),现在看不懂也没关系,这个是需要花时间学的。从C过渡到C++只需要一个下午(C基础好),但是学会使用C++的各种函数,需要花很久。
4.推荐书籍:
个人入门用的是《C++ primer plus》第六版。这本书很厚,但是不需要看完,就像用字典一样看它就可以(用来看各种函数定义)。然后是提高,建议买一本专门讲STl的书来深入掌握STL,因为它真的很重要。

泻药

推荐一下,黑客教父王宝明,具体课程百度即可

多做多学,多琢磨,找规律,因为我现在也出于学习阶段,我感觉这样下去应该能够成功

如何从c语言过渡到c++呢?
c语言过渡到c++主要涉及下面几方面 头文件与命名空间 C语言没有命名空间的概念,而C++有,最典型的是初学时经常用到的using namespace std; 代表使用命名空间std,或者使用std::functuion(); ,即函数、变数名前面加上空间名和域解析符来使用命名空间。命名空间可以嵌套定义。为了统一,C++会把C语言...

做了个C语言的,怎么转换成C++输出输入
C语言一般用printf输出 scanf输入 C++也是兼容这些的 只要包含cstdio就可以了。如果想改成c++的,那么就把这些输入输出函数 改成cin和cout就好了。比如 scanf("%d%d",&a,&b);===> cin>>a>>b;printf("aaaa=%d\\n",a);===> cout << "aaaa=" a<<endl;

如何从面向过程的C,转到面向对象的C++呢?
首先,你已经有一定的基础了 假设c++完全包含c,事实也是这样的,这一部分你知道了 剩下的就是完全忘掉c,重学c++,呵呵,当一门新的语言来学 重点的就是面向对象的部分,继承,多态,模板,STL,设计模式这些东西 接受是个过程。习惯就好了

怎么把这个c语言程序改成c++语言程序
首先C程序可以使用C++编译器,你只需要增加命名空间std的声明,当然如果你想把C当中的stdio.h的内容换成IO的也可以 比如:\/\/c CODE#include <stdio.h>int main(){int a;scanf(a);printf(a);return 0;}\/\/c++ CODE#include <iostream>using namespace std;int main(){int a;cin>>a;cout<...

C语言就没学好,怎么再学C++
现在学C++,从头开始,听课之前先自己看课本,多上机,书看一遍不懂的就再看一遍,然后把课本的代码自己上机一遍,理解,做了这些,听不听课都没所谓了,加上课程安排的实验,你就认真的做,上课只是让你有个机会把自己实在理解不了的东西能够问老师,还有的就是巩固你自学的知识,加深理解,记忆。

在有c语言和java语言的基础上转c++需要多久?
转到C++并不过于艰难,因为C++在语法上与C语言有许多相似之处,因此,通过阅读一本C++辅导书籍并进行实践练习,您能够迅速掌握基础知识。进一步地,理解当前工作中涉及到的C++编程领域对于您至关重要,比如图像处理、网络编程和界面设计等。明确这些方向后,着手参与相关的项目,例如辅导书籍中包含的项目实例,...

c语言学到什么程度才可以学C++,前辈给我指点
最关键的一点是:要学会用计算机运作的方式进行思考,并能够将自己的思想转换成标准语言的格式。这样,无论学习C还是C++,都能够更加得心应手。随着对编程语言理解的深入,你会发现,掌握基本概念和技巧是构建复杂程序的基础。学习编程是一个不断进步的过程,而不仅仅是掌握语言本身。通过实践,你会发现,...

怎么把C语言程序改为C++程序
C语言程序其实就是C++程序,因为C++兼容了C。C++中输入语句用cin代替scanf,cout代替printf,但是C++也识别scanf和printf 主要区别是C++扩展了C,有面向对象。若要改,可以:头文件 include "stdio.h"-> include <iostream> using namespace std;cin代替scanf,cout代替printf ...

如何将C语言代码改为C++
C++一般用cin和cout来输入、输出。cout<<"请输入你想要的休息日(1-7)";cin>>p->day[0];cin>>p->day[1];...cout<<xingqi[y[0]];...

C语言中输入输出语句转换成C++语句
c语言中的输入输出语句换成C++语句是将printf()函数换成cout对象,将scanf()函数换成cin对象。问题中提及的代码:printf("第%d名的名字:",t);scanf("%s",&p->date.ach[t-1].name);对应的C++代码:cout<<"第"<<t<<"名的名字:";cin>>p->date.ach[t-1].name;...

相似回答
大家正在搜