※ 引述《joeywayi (拉拉拉吃屎啦)》之铭言:
: 如题
: 想请问各位攻城湿
: 因为我自己是学习c++入门的
: 觉得比起java友善很多
: 常常听到说c++很难
: 这个是真的吗?
C跟C++是完全不同的语言(无误
C++是个很大很大的坑(相比JAVA/.NET)
C的圣经 The C Programming Language 很薄一本
看完也懂了八九成,写纯C你不用看太多书
C++公认的圣经 C++ Primer 厚厚一本
看完之后你更不懂了,写C++书看不完
C跟C++最简单的差异包含
1.内存管理
//这是C的写法
int *ptr = malloc(sizeof(int)); //配置内存
free(ptr);//释放内存
//这是C++的写法
int *ptr = new int(100);//配置内存
delete a;//释放内存
而C++的new 跟delete又会影响 建构式(constructor)跟解构式(destructor)的呼叫
在C/C++中内存管理,是很重要的事情,没弄好就会造成内存被占用
2. 物件导向(Object-oriented)
把所有方法、函式都模组化,并且有封装、继承、多型、抽象的概念(详细自己研读)
而举例来说goto 是C中一个很强大的功能,
但到了C++反而建议不要用,因为会危害程式的可阅读性
而你要在C中写出类似OO的语法当然也是可以,但就很像闭门造车,自找麻烦
3. 样板(Template)
C++之所以强大的原因之一,自己研究
然后C/C++ 跟JAVA/.NET 相比
1. 内存管理
JAVA/.NET 少了delete 跟free这些要自己手动释放内存的家伙
取而代之的是Garbage Collection(俗称GC),
让底层自动帮你管理哪些资源不再被利用需要释放
因为是系统底层管理的,所以你也不能知道到底释放了没
你顶多使用GC.Collect() //.net 去通知系统该释放了,但系统到底释放了没 天知道
2. 泛型(template)
你没看错,跟C++的样版名称一样,但偏偏两者不完全相同
MSDN中简单说明了这两者不是一样的东西,C#中的是阉割版(应该可以这样说)
https://msdn.microsoft.com/zh-tw/library/c6cyy67b.aspx
3. 指标(pointer, ptr)
C就俱备的强大利器,把内存的利用又细分成实体跟门牌号码(指标)的概念
先学JAVA/.Net的在回去看C/C++ 常常会看不懂 ptr到底在干嘛
因为JAVA/.Net 已经简化了ptr,在里面可能会看到的指标大概就只剩this(物件本体)
以上是小弟工作写了半年C++简单的介绍.Net 跟C++的差异
如果是学习导向的,C++跟.Net都学不会吃亏
如果是工作导向的,就看你要走哪个领域
e.g 走前端html/javascript的话,你就不需要学C/C++了