學習C++與Java之間的區別

來源:互聯網
上載者:User

標籤:

本人原來學習Java的,由於工作原因得接觸C++。在C++的接觸過程當中,犯了很多的錯誤,但是仍然糾結於文法細節上,讓我很難適應。剛開始一致覺得可能是做的少了,一個項目而言能碰到設計文法細節的方面其實相當有限,如果僅僅是完成工作保險就可以了,但是對於C++的理解,也就僅限於一個碼農的水平了。

可能對於物件導向角度看待兩者區別過於執著,直到完整看完《C++編程思想》才理解了之間的細微差別,其實很多文法通則都是類似的。只不過在於側重和思維方式上還是很大的,可能這也是C++轉Java的時候,可能會覺得Java簡單,但是構建一個合理的項目的時候還是C++的方式,Java的便捷性和思想並沒有被接觸到。Java轉C++反而被,紛繁的文法細節和靈活度給充分搞暈了過去。其實相互來看,都沒有很好的理解各自語言的有事部分。

Java要理解抽象的定義,把側重點應該放到類組織方式,類職責的管理層級等設計問題上來

C++要充分理解C語言,除了上面提到的,也更應該注重記憶體問題的思考和判斷上。

1、物件導向

對於C++而言,談物件導向的時候,是物件導向設計

對於Java而言,談物件導向的時候,是物件導向思想

不要小看這兩者之間的區別,C++說到底還是C語言的衍生版,通看《C++編程思想》其實,對於類設計,繼承,重載這些並沒有看作物件導向特性來判斷,只是提供了一種代碼服用的表現形式以及“晚捆綁”在C++編譯器中相對於C語言編譯器的區別和有事。但是在《Java編程思想》當中,則是把類,繼承,重載,多態等作為很重要的物件導向思想來看待的。

舉一個例子,static修飾符

在C++當中,存在類內靜態成員變數的問題和Java其實是一致的,但是C++仍抱有C語言特性,static生命仍具有全域概念。Java當中已經不存在所謂的全域概念了,更準確的說是通過類邊界,將全域概念隱藏了。作用雖然一致,但是Java在於static提供類共用的時候,可能並沒有C++來做的判斷合適

2、代碼

這個也很多人忽略,語言只是工具,只要按照演算法做就是了,但是工具可是各有各的特點,往往也被忽略掉了。

舉一個例子:null 指標判斷,數組越界,異常,斷言

可能上面說的,在於C++而言要完全控制的,如果不控制就會出大問題,直接對應到記憶體的異常。可是Java而言,由於是純物件導向語言,加上完整的基於虛擬機器的異常控制,使得數組越界而言可能並不是什麼大問題,throws一個Exception和記憶體異常比較起來反而小的多。可見Java對於記憶體的隱藏優勢

3、組織

看C++代碼,給我一個很深刻的印象就是,我能很準確的看懂他的組織形式和功能。然而Java我需要充分理解類之間的階層和邊界問題,往往搭建庫的時候映射到上層,很難通透的看出整個的形式和功能,只能基於類的調用來梳理。

由此也可以看出C++還是遺傳了C語言的特性,是一個基於文檔目錄結構來做程式碼群組織的。雖然有了物件導向特性,但是就物件導向只是給C++一種代碼服用以及設計時邏輯區分。然而對於Java而言,物件導向可是貫徹始終的。

舉一個例子:C++標頭檔的引入

很多人不太習慣為什麼我寫一個類,還要引入標頭檔,和Java類似寫到一個檔案裡面不行嗎?!其實C++,這是嚴格遵守了先聲明後使用的邏輯。所以對於標頭檔引入的混亂的管理可以通過這個出發點,達成一定的一致的。

4、庫函數區別

初看之下,覺得C++的庫函數能做的,Java也都做了。但是其實還是有一些細微的區分的。

舉一個例子:sort()函數

C++當中對於vector的排序,是通過sort(vec.begin,vec.end,_compare)來進行的

Java當中呢,則是要複寫需要比較類的Compare方法的。

這樣你還會覺得C++是個物件導向的語言嘛?明明是一個類和另一個類比較,這個比較是一個類行為,為什麼還要在sort中放一個比較,這種跳出呢?

學習C++與Java之間的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.