沒有什麼語言能比C++更加貼近Windows自己了,這一點也是不能否認的。若是哪一天C#也能寫驅動的時候,那麼C++就真的會淘汰了(這天可能不會太遠又或者很遙遠)。
C#能作的,C++不必定都能作,C++能作的,C#也不必定都好作,因此常常看到有人拿這2個語言對比,我以爲確實沒什麼必要。
C#繁雜的調用Win32 API的方式,確實讓人很不舒服,C++這一點作得比它好。可是,C#強大的網絡操做,代碼量大大地低於C++,咱們拋棄不用Socket,改用WinInet或是MFC中的封裝好的網絡類,好比CHttpFile,仍是沒C#簡單。C#的傻瓜式的類庫操做和麪向對象編程的完美特性,確實讓其成爲了Windows平臺上最受歡迎的語言。也許,是微軟想將Win32 API漸漸地所有封裝到C#的類庫中去,我感受微軟有這個意圖,也許未來C#就不須要調用那些繁雜的Win32 API了,類庫中均有提供也說不定。
咱們爲何學VC?這點我曾經也問過本身。聖經上說:你必須知道真相,真相會使你自由。咱們學VC是爲了自由,不受微軟的框制。微軟經過種種的FrameWork讓你陷於其中,你以爲,哇,原來編程是這麼容易啊,幾句話就能搞定。你想知道微軟在內部幹了些什麼呢?你不知道,固然,你若是認爲你不必知道,這個我徹底贊同,我後面會說。就說殺進程吧,C#中不經過Win32 API就那麼一種方式,經過System.Diagnostics.Process找到進程,而後Kill之(若是我說的不對,使用C#的朋友請指正),而C++中,咱們徹底有無數種選擇,就說不邪惡的,TerminateProcess,邪惡點的呢?不可勝數。進程內存填0,卸載模塊,消息洪水,句柄強制關閉,強制釋放它的堆,太多太多了,甚至我注入進去,內部Raise一個異常,它也就掛掉了。保護進程, 無論內核下仍是應用層,C#確定是作不了的,C++有本身高端的地方,其餘語言沒法涉足。你見過C#作的殺毒軟件嗎?
C#,極其簡易的界面操做,使人看着很舒服的編碼,他有太多的地方,C++根本沒法涉足。拿C++作Web Services除非是大腦進水,用C++作網絡蜘蛛,也根本是無聊之舉,要麼就C#,要麼就拿Python來幹(我的漏見),超級大量的數據,拿垃圾回收基本上爲0的C++去作,簡直就是自找麻煩。C#的WebForm,和Jsp佔據着Web的大片江山,C++能嗎?不能。C#是一門博大精深的語言,類庫強大到變態,基本上能夠這麼講,因此用C++的朋友也不能隨便貶低C#程序員,C#的程序員的層次分得比C++多不少,高層的也是象牙塔級別的。C#的架構師,那種恐怖的實力,C++中級程序員是沒法想象的。C#更加註重於軟件工程的應用,各類設計模式的使用,C++則注重於實現功能。
C#的前景是不錯的,我我的很看好它,MSDN 雜誌每期的文章可能有8成是C#,C++不算不少,微軟的重心可能在C#上,但願C#逐漸能取代C++。可是C++會這麼容易被取代?不可能。就像一個搞管理的,你讓他接管搞開發的人,讓他從幹同樣到同時兼幹這二樣,會有這麼簡單麼?c++的生命力至少還要7-8年,以後纔會漸漸的淡出,可是隻要追求自由的人存在,C++就不會消失;只要操做系統一天是用C++寫的,C++就不會消失。
選什麼語言,隨本身高興,須要哪一個用哪一個,這是不矛盾的。開發數據庫,我傾向於用C#,作Windows底層,我確定是C++,都掌握下沒有壞處。VS2010中C++的新特性各位同胞能夠關注下,不知道會加入什麼,VC2008的特性我探索了這麼久,尚未探索結束。C#是愈來愈好用了,Linq to Sql讓不懂數據庫的人都能去操作數據庫了,輔助一些第三方類庫,能發揮強大的威力。徹底取代C++,等操做系統是C#寫的,C#能開發系統中的一切組件的時候再說吧,至少如今C#還不能開發API,驅動吧?c++
C與C++的區別
C是一個結構化語言,如譚老爺子所說:它的重點在於算法和數據結構。C程序的設計首要考慮的是如何經過一個過程,對輸入(或環境條件)進行運算處理獲得輸出(或實現過程(事務)控制),而對於C++,首要考慮的是如何構造一個對象模型,讓這個模型可以契合與之對應的問題域,這樣就能夠經過獲取對象的狀態信息獲得輸出或實現過程(事務)控制。
因此C與C++的最大區別在於它們的用於解決問題的思想方法不同。之因此說C++比C更先進,是由於「 設計這個概念已經被融入到C++之中 」,而就語言自己而言,在C中更多的是算法的概念。那麼是否是C就不重要了,錯!算法是程序設計的基礎,好的設計若是沒有好的算法,同樣不行。並且,「C加上好的設計」也能寫出很是好的東西。
對語言自己而言,C是C++的子集,那麼是什麼樣的一個子集?從上文能夠看出, C實現了C++中過程化控制及其它相關功能,而在C++中的C(我稱它爲「C+」),相對於原來的C還有所增強,引入了重載、內聯函數、異常處理等等玩藝兒,C++更是拓展了面向對象設計的內容,如類、繼承、虛函數、模板和包容器類等等。
再提升一點,在C++中,數據封裝、類型這些東東已不是什麼新鮮事了,須要考慮的是諸如:對象粒度的選擇、對象接口的設計和繼承、組合與繼承的使用等等問題。
因此相對於C,C++包含了更豐富的「設計」的概念,但C是C++的一個自洽子集,也具備強大的功能,一樣值得學習。
幾點學習建議:
1.基本概念很重要。不管學C,仍是學C++,基本概念都是第一位的,也是比較困難的,但只有把握了基本概念才能把握總體脈絡,才能居高臨下。
2.C是C++的子集,它的基本概念和設計方法相對比較容易理解,初學者可從它入手。
3.若是要學好C++,建議初學者最好別在如VC,BCB平臺下寫程序,那種自動化的代碼生成,花花綠綠的界面,會讓你手足無措。最好先找一片空地(unix,dos),從頭作起,寫幾個大點的程序,數個回合,再到VC,BCB下看看,你會輕鬆得很。在我看來,學好C/C++是成爲VC,BCB高手的必由之路。
4.不要妄想速成,必須得一個byte,一個bit的去摳,儘可能搞清楚每個問題。
5.幾本好書:
機械工業出版社的那套「計算機科學叢書」從C到C++,到面向對象設計,包羅萬象,都TMD是經典中的經典,並且價格公道,童叟無欺。
國內也有幾本好書,譚老爺子的書好卻是好,就是程序錯誤太多。強烈推薦清華周之英的《現代軟件工程》(上、中、下),它是我所見到的國內少有的一本好書,精華的精華,要點的要點,細細品來,至少也屬降龍十八掌等級的東東。
若是仍是有人想學習C/C++的話, 有一些小問題我仍是樂意解答的. 可是我認爲學習C/C++是不重要的, 重要的是如何鍛鍊你的思路. 不要找一些連本身都搞不清的問題去作.
我認爲雖然 "潭浩強" 同志有騙錢的嫌疑( 我手頭就有一本幾乎如出一轍的英文書 ), 可是, 是他把這本入門手冊引入中國, 使無數程序員瞭解了C語言, 我想他的功勞也是不可磨滅的. 在< C語言程序設計 >這本書中全部的例子均可以用作鍛鍊思路的基石, 他對你們的編程是頗有幫助的. 我認爲是值得一買的. 去思考課後的例子對你的編程頗有幫助. 不要小看一個一個簡單的例子, 他們是你通往成功的道路.
當你基本可以掌握了上一本書中例子後, 你就要本身找一些例子程序去看. 開始多是看不懂, 可是隻要努力就沒有什麼問題. 當你看過幾個較大的例子以後, 你會茅塞頓開, ( 大量閱讀例子程序是學習C/C++的捷徑 ). 你會發現, 你的水平有了顯著的提升. 你看的例子越多, 你對 Windows/DOS 瞭解的越多. 最好可以再看一些關於系統知識的書籍. 他會對你的編程頗有幫助的.
這是我學習C/C++的一點心得, 但願對沒有被我嚇到而要繼續學習C/C++的朋友們有一些幫助. 省得有些同志說我破壞中國軟件人才的發展.
在最後我祝願全部堅持學習C/C++的朋友們成功! 同時感謝閱讀過我文章的同志們.
想學好C++,非學C不可!!!
今天我這麼確定的在這裏講這番話,是不想初學者陷入到語言越新越好的誤區,原本這個題目就不是很嚴謹,可是我有幾句話必須講講,爲C平反!!
C++與C有什麼不一樣呢?咱們如今一步步地來分析一下
1、類,類我並不說它有什麼很差,可是對於初學者,它是一個累贅。類的封裝使得初學者對程序產生厭倦,感到不適和麻煩。
2、引用,引用是C++中最臭屁的東西了,最好儘可能不要用它,我就是歷來不用引用,除非萬不得已。引用對於初學者就更容易產生混淆,不知道哪一個是引用,哪一個是變量。
3、函數的重載,初學者學函數的重載好像沒什麼壞處,可是,這會使初學者潛意識裏對C語言的變量類型的重要性產生淡化,要記住C語言是對變量類型最敏感了的,變量的類型在C語言裏的重要性是不言而喻的。
4、流操做符,和上面一樣的道理,使得對變量類型的重要性產生淡化,何況,cin這個東東有點兒不怎麼方便,有時會產生使初學者莫名其妙的結果。
5、操做符重載,典型的高級應用,初學者可能根本用不着,這個東東會讓他們以爲C++很難,門檻高,看不懂…………。
6、繼承,以及虛函數,典型的模仿四不象,這種狗屁東西除了看起來深奧,實用價值很低………………。我怎麼可能把某個類的類型的指針去指向另外一個不一樣類型可是是繼承關係的類,來實現什麼動態聯編,暈…………
………………還有些東東我就不發表評論了,如:new,delete操做符等…………
7、誤區:以問答形式:
問:C++是面向對象化的而C是面向過程化的?
答:第二對,第一問錯,C++並不是徹底面向對象化,真正的面向對象化的語言恐怕只有Java纔算得上。
問:C++能實現C所不能的功能嗎?
答:至少我尚未發現……
問:學了C再學C++有障礙嗎?好比程序設計思想……
答:至少我尚未看見誰有此症狀。
問:學了C再學C++又要重頭開始嗎?
答:不,C++下能夠實現C語言的一切功能。
問:我學完了C必定還要學C++才能編程嗎?
答:徹底不必。
問:C++比C好在哪裏?
答:更加符合軟件工程學
問:學完了C再學C++是否是很容易?
答:那要看你是否是真正的學完了C語言,我從C到C++就一個星期的睡覺前的時間看兩眼書,而後就大徹大悟。再跑到這裏來發表些狗屁文章了。
最近在網上看到了不少人的學習方法,本人很是不贊同。不少人都想一口吃個胖子,要學就想學最新的,好象沒有人願意再去學那些老的,舊的編程語言了。但大家能學的懂嗎?不學TC2。0等那些較早的優秀編程語言,大家能理解的了VC6。0?若是你真的能,我寧願作你的徒弟!真是奇怪,那些最基本的語言都不懂的人,怎麼可能去理解那些最新的編程語言?我學編程有三年了吧。成績也不算多,只有一個計算機四級證和一個高程證,但我以爲我在學VC的時候還有不少的不明白的地方。沒有人來教我,只能靠我本身,包括全部的成績在內,我都是靠本身,我從不報班。學VC的半年多來,我想我已經基本入門,但依然有不少的困惑。剛開始學VC,就面臨一個項目,我真的猶如笨蛋通常,四處嚇摸,毫無頭緒,最後勉勉強強纔算作個差很少。學好VC再去學其餘的高級WINDOWS編程,我想那真是垂手可得,畢竟WINDOWS的內部的不少東西都能直接被VC調用,你首先就能夠對WINDOWS有個全新的認識,再去學其餘的語言豈能不簡單?
個人感受是,面向過程和麪向對象,其實都很重要的,在VC裏也依然須要面向過程,不少東西都是一環扣一環,沒有面向過程的思想,怎麼可能去編程呢?建議多去看看有關WINDOWS編程的書,但多數都是比較老的書呦!我依然記得當年成天進行TC編程的辛苦,但我依然很懷念當年的勞動付出,畢竟我得到了我想得到的一切——編程思想。我以爲一個好的編程思想,絕對比你去學一門計算機語言好重要的多。要造成本身的編程風格。一個好的編程思想在你的頭腦中一旦造成,學習什麼語言都會很垂手可得,由於此時的你不在是簡簡單單的學習,而是來驗證!程序員
C,C++,C#三者區別
繼承關係是C->C++->C# C++徹底向C兼容,C程序幾乎不用修改便可在C++的編譯器上運行.C++也稱爲帶類的C,在C的基礎上增長了許多面向對象的概念.雖然是C的擴展,但 並不意味着C功能不如C++,最牛的操做系統是用C寫的(不是C++哦).
C#是微軟弄的一個東東,繼承了C和C++的許多東西,但和二者基本上 已徹底不同了.你能夠把它看成一種全新的語言來學.
發瘋ing
[大師]
C語言是一種結構化編程語言。 它層次清晰,便於按模塊化方式組織程序,易於調試和維護。C語言的表現能力和處理能力極強。它不只具備豐富的運算符和數據類型,便於實現各種複雜的數據結 構。它還能夠直接訪問內存的物理地址,進行位(bit)一級的操做。因爲C語言實現了對硬件的編程操做,所以C語言集高級語言和低級語言的功能於一體。既 可用於系統軟件的開發,也適合於應用軟件的開發。此外,C語言還具備效率高,可移植性強等特色。所以普遍地移植到了各種各型計算機上,從而造成了多種版本 的C語言。
下面是C語言教程的地址,想學的話能夠去看看。
http://www.bc-cn.net/Article/kfyy/cyy/jc/
C++ 是在C的基礎上改進後的一種編程語言,主要是增添了許多新的功能,難度也比C大,和C同樣側重於計算機底層操做,也就是系統軟件的開發。 C#是在C++的基礎上再一次改進後的編程語言,相比C++而言難度有所減少(微軟是這麼說的),側重於網絡和數據庫編程。這3種都是編程語言,語法基本 上是同樣的,不過具體的內容差異仍是挺大的。
VC++是一種編程軟件,就至關於一個做業本,你學習了C++語言之後,就須要把這種編程語言寫在一 個做業本上,也就是寫在VC這種編程軟件上,來實現你須要的效果。
C++是C語言的升級版
c是c++的子集,c是面向 過程的,c++是面向對象的
By:zhuzhumm
C 語言與 C++ 的區別有不少:
1,全新的程序 程序思惟,C 語言是面向過程的,而 C++ 是面向對象的。
2,C 語言有標準的函數庫,它們鬆散的,只是把功能相同的函數放在一個頭文件中;而 C++ 對於大多數的函數都是有集成的很緊密,特別是 C 語言中沒有的 C++ 中的 API 是對 Window 系統的大多數 API 有機的組合,是一個集體。但你也可能單獨調用 API。
3,特別是 C++ 中的圖形處理,它和語言的圖形有很大的區別。C 語言中的圖形處理函數基本上是不能用在中 C++ 中的。C 語言標準中不包括圖形處理。
4,C 和 C++ 中都有結構的概念,可是在 C 語言中結構只有成員變量,而沒成員方法,而在 C++ 中結構中,它能夠有本身的成員變量和成員函數。可是在 C 語言中結構的成員是公共的,什麼想訪問它的均可以訪問;而在 VC++ 中它沒有加限定符的爲私有的。
4,C 語言能夠寫不少方面的程序,可是 C++ 能夠寫得更多更好,C++ 能夠寫基於DOSr程序,寫 DLL,寫控件,寫系統。
5,C 語言對程序的文件的組織是鬆散的,幾乎是全要程序處理;而 C++ 對文件的組織是以工程,各文件分類明確。
6,C++ 中的 IDE 很智能,和 VB 同樣,有的功能可能比VB還強。
7,C++ 對能夠自動生成你想要的程序結構使你能夠省了不少時間。有不少可用的工具如加入 MFC 中的類的時候,加入變量的時候等等。
8,C++ 中的附加工具也有不少,能夠進行系統的分析,能夠查看 API;能夠查看控件。
9,調試功能強大,而且方法多樣。
鑑於當下形勢, 若是要學的話就學 C#
C# 與 C++ 比較的話,最重要的特性就是 C# 是一種徹底面向對象的語言,而 C++ 不是,另外 C# 是基於 IL 中間語言和 .NET Framework CLR 的,在可移植性,可維護性 和強壯性都比 C++ 有很大的改進
C# 的設計目標是用來開發快速穩定可擴展的應用程序,固然也能夠經過 Interop 和 Pinvoke 完成一些底層操做,可是對於一些和底層系統相關很緊密的程序(譬如說驅動程序),仍是建議用 C++ 來寫
C++ 不容許在一個構造函數中調用另一個構造函數(稱爲委派構造函數調用),而 C# 則容許。委派構造函數調用語法上很是天然和易懂,事實上, C++ 不提供這一特性並非出於語法上的考慮,而是出於資源管理的考慮(這樣的事情對 C++ 來講還有不少不少)。
C++ 的構造函數用於分配資源,而析構函數用於釋放資源,構造函數和析構函數調用必須匹配,不然就打破了 C++ 的基本規則。若是容許委派構造函數調用,則顯然會打破這一規則——構造函數被執行兩次,而析構函數只執行一次。固然,對一些類,例如前面的那個 Point 來講這不是個問題,可是從語言機制的角度講這個特性可能屬於「危險」的特性。注:在最新的 C++ 標準提議草案中,Herb 等人有一個關於容許委派構造函數調用的提案,固然這很大程度上是爲了方便 C++ /CLI 綁定。
在 C++ 構造函數中,虛函數調用會被編譯器自動轉爲普通函數調用,而在 C# 構造函數中容許進行虛函數調用。 C++ 這樣處理天然有它的緣由——在 C++ 中,構造函數執行完成後對象才初始化好,對於多態對象來講,也就意味着構造函數在背後執行了很重要的一件事情——初始化對象的虛函數表。
如 果咱們在基類的構造函數中調用了虛函數,則由於此時對象的虛函數表仍舊是基類的虛函數表,因此沒法進行正確的虛函數調用。
也就是這個緣由,一般我 們應該避免在構造函數中調用虛函數,由於它違背了虛函數的語義。
而在 C# 中,在對象的構造函數執行以前對象的類型信息就已經初始化好了,因此能夠進行正常的虛函數調用。
基本上,這些就是二者之間的區別算法