如何从c语言过渡到c++呢?
题主用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,因为它真的很重要。
泻药
推荐一下,黑客教父王宝明,具体课程百度即可
多做多学,多琢磨,找规律,因为我现在也出于学习阶段,我感觉这样下去应该能够成功