程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 幾分鐘教您玩轉C++程序

幾分鐘教您玩轉C++程序

編輯:C++入門知識

許多編程人員學習C++程序總結經驗為,有的覺得C++語言是一門獨立的語言,並不是在C語言的基礎上,可以直接學習C++不必先從C下手,希望通過本文的介紹能給大家帶來有用的知識。

C++是個強大的語言,可以用於做別的語言做不了的工作。但是,這種強大功能是有代價的。開始使用C++時,你可能會遇到內存溢出和訪問失效等問題,使程序死機。這裡用最簡短的篇幅介紹C++語言基礎。C++語言本身有專著介紹,這種書還特別厚,所以別指望我能用三言兩語說清楚。讀者學完本書並使用C++ Builder一般時間之後,最後對C++語言再作更深入的了解。

C++可以最充分地利用面向對象編程(OOP)的優勢。OOP不只是一個新名詞,而有它的實際意義,可以生成可復用的對象。新術語 對象(object),和前面介紹的構件一樣,是完成特定編程任務的軟件塊構件是對象,但對象不全是構件,稍後會解釋這點)。

對象只向用戶使用對象的編程人員)顯示必須的部分,從而簡化對象的使用。用戶不必知道的所有內部機制都隱藏在幕後。這一切都包括在面向對象編程的概念中。OOP可以用模塊化方法進行編程,從而避免每次從頭開始。

C++ Builder程序是面向OOP的,因為C++ Builder大量使用構件。生成構件後你生成的或C++ Builder內置的構件),就可以在任何C++ Builder程序中重復使用。構件還可以擴展,通過繼承生成具有新功能的新構件。最妙的是,構件隱藏了所有內容細節,使編程人員能集中精力充分利用構件。

入門簡介

C++之前先有C語言,C++是建立在C語言之上的,稱為“帶類的C語言”。這個C語言基礎在當今的C++程序中仍然很重要。C++並不是取代C,而是補充和支持C。本章余下部分和下幾章主要介紹C++中來源於C語言的部分。

實際上,這裡介紹的是C語言,第2課"C++基礎"中才轉入C++。讀者不必關心哪個來自C,哪個來自C++,因為這些全在C++中。C++語言很難按順序介紹,因為我們要介紹的所有特性都是交叉的。我准備的一次介紹一塊,然後拼湊起來。到第3課"高級C++"結束,你將對C++語言有個完整的了解。一下子沒有掌握某個概念也沒關系,有些概念必須經過實踐才能完全了解。


為什麼啰嗦這麼一大通呢?就是因為,一直以來泛濫於程序員社群的“語言之爭”,背後真正的原因其實並不在於語言實質上的優劣,而在於觀察者的眼睛。在觀察者的眼睛裡面,語言並非一門工具,而是自己花了N多時間其中尤數C++為最)來“修煉”的技能,對於這樣的技能,被否定無疑等同於自己被否定。

所以,從心理學上講,語言並不是工具盡管一直有這麼一種呼吁),而是信仰。這樣的信仰在越是花得時間久的語言上越是激烈。有趣的是,幾乎所有的“熱鬧”的社群都有這樣的現象,Java、Python、Ruby…莫不如是;因為就算語言本身不復雜,程序員仍然還是要投入大量的精力去學習各種各樣的框架類庫想想Java的那些框架?)。因此這些語言社區的信仰未必不比C++社群的強烈。

然而,一旦弄清我們為什麼會把語言當成信仰,就非常有助於擺脫在看待語言時的“自我服務偏見”,從客觀的角度去看待問題。——“當你看到的是支持某個意見的證據時,試著去想一想有哪些證據是不支持它的”。

那麼為什麼要擺脫自我服務偏見?說小了,是為了成為一個更優秀的程序員誰也不希望因為偏見而去使用一門低效的語言乃至不妥當的語言)。說大了是節省生命因為偏見可能導致越陷越深,浪費時間)。 所以,如果你能夠理性的思考我們將要討論的問題,避免自我服務偏見就當你從來沒有花時間在C++上一樣)。那麼我們便可以開始討論真正的問題了。

現在,幾乎每個學習C++程序的都知道C++的核心問題是其復雜性;甚至本身不在C++社群的,也知道這是事實。群眾的眼睛是雪亮的,何況這還是個太顯而易見的事實。

但看了無數篇闡述C++復雜性的文章,和爭論C++復雜性的吐沫星子包括我前段時間寫的兩篇關於C++的總結)。我始終都有一個感覺——沒分析透,就跟盲人摸象一樣。正如“Why C++”的一位讀者批評的,我在文章裡面沒有寫明到底哪些是C++的“非本質復雜性”。

當然,我自己憑感覺就能知道,而接觸C++一段時間的人大致也能知道,但新手乃至非新手則對我所謂的“非本質復雜性”根本沒有一個具體的認識,這就使得那篇“Why C++”脫離了原本的意圖——面向所有C++使用者和學習者。

同樣的原因,在寫了“你應當如何學習C++”一文之後,當孟巖先生邀請我給《程序員》寫一個系列的文章,介紹一下我在接觸C++的過程中的態度和認識轉變時,我雖然非常高興的答應了,但直到現在3個月過去了還是顆粒無收。

為什麼?因為我覺得真正本質的問題沒有被清晰的觸摸到;所以直到現在我都沒有動筆,免得廢話說了一大堆,除了能被當成小說讀讀之外,對真正考慮是否要學習乃至使用C++的人未必有什麼實際用處。

然而,這麼個念頭一直都放在潛意識裡面。前一陣子和Bjarne通信,談到了關於C++復雜性的一些想法,在郵件裡面總結了一下C++的復雜性來源,感覺思路清晰了許多。而這篇文章要達到的目的,正是傳達對C++的復雜性的一個具體而明確的認識,有了這個認識作為支持,我們便可以推導出學習C++的最佳實踐者)的方法。

為什麼要學習並使用)C++

顯然,如果找不出要學習C++程序的理由,那麼談什麼“正確的學習方法”等於是廢話。

首先重復一句Bjarne的話:“我們的系統已經是極度復雜的了,為了避開C++的復雜性而干脆不用C++Linus的做法),無異於因噎廢食。”在所有可用C和C++的領域,C++都是比C更好的語言。當我說“更好的”時候,我說的是C++擁有比C更安全的類型檢查、更好的抽象機制、更優秀的庫。

當然,凡事都有例外,如果你做的項目1)不大。2)編碼中用不到什麼抽象機制,甚至ADT抽象數據類型,例如std::complex這種不含多態和繼承的)也用不到,RAII也用不到,異常也用不到。3)你連基礎庫如,簡化資源管理的智能指針、智能容器)都用不著。

  1. 簡介學習C++總結之談
  2. C++庫函數進行學習探索總結筆記
  3. C++類庫設計的基本構思與方法
  4. C++語言真的還有市場價值?
  5. C++類庫設計的基本構思與方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved