色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從C++的“深度”與“廣度”來探究其復雜程度

C語言專家集中營 ? 2018-01-15 15:48 ? 次閱讀

從深度和廣度談C++的復雜度

C++到底有多復雜,沒有人知道,我們知道的,只是C++很復雜。但是再復雜的事情也有解決的方法,對于C++的復雜度,我們可以從C++的“深度”與“廣度”來探究。

C++有一個樸素的思想:“簡單的問題用簡單的方法解決,復雜的問題,用復雜的方法解決。”。這句話當然不能絕對化。一個問題的復雜性,往往有多種來源,比如可以是“深度”上的困難;從這一點上,我們了解,證明“任何一個>=6之偶數,都可以表示成兩個奇質數之和 ”是個難題,雖然題目很短一讀明白,但它確實是一個復雜的問題,因為它是“哥德巴赫猜想”。

復雜度的來源也可以是問題的“廣度”。比如給一個人做一道可口的菜是簡單的,但今天是周末,我家來了七大姑八大姨,站在廚房里的我就會感覺面臨一道復雜的問題。我不僅要了解每一位親人的口味,并不絕不能做八道菜,讓客人各選所需就算了。八個簡單的問題,交叉在一起時,成就了一道“眾口難調”的復雜的問題。

C++中所具備的復雜功能,一小部分有助于我們解決深度上的復雜問題,但更多的功能,是為用來對付“廣度”上問題。這符合軟件開發行業的主要市場需求。

小結一下:C++中有很多復雜的(方法或)知識點其實是留著對付一些復雜問題的。但,我們在學習C++時,我們能遇上什么“復雜”問題嗎?答:很少,甚至就是沒有。那么,光靠一些簡單的問題,我們能理解那些復雜的方法嗎?

比如“面向對象”。C++之父早說過,C++語言不是,也不愿意成為一門單純的“面向對象”的語言。為什么?因為“簡單的事情簡單解決。”,“面向對象”的編程思想,在歷史上出現,就是為了解決足夠龐大的復雜問題才提出,并且確實取得了一定程度上的成功。于是乎人人都對它趨之若騖,更是成為了大學編程專業的必修課。但請問,你根本就沒可能在書本上遇上任何足以體現“面向對象”之必要性的問題,你怎么學習“面向對象”呢?請注意,寫一個“非常面向對象”的程序,是很容易地,一個java版本的“Hello world”程序就很OO。但把程序寫得非常有“面向對象”的風格,這絕對不是我們的目標。目標是解決問題,“面向對象”是一種“思想工具”,當我們判斷再沒有更簡單的工具來解決一個問題時,于是把手伸入機器貓的口袋,叮叮鐺……屏幕上打出四個大字“面向對象”。

有同學要舉手反對了,復雜度是相對啊。一個在大拿眼里,很簡單的,用面向過程可以非常漂亮地解決的問題,但在初學者面前,就是一個大廣度的問題,這時,作為一種組織方法,“面向對象”不能幫我們些什么嗎?如果能幫上,那我們用它來學習“面向對象”,就不算是紙上談兵了吧?

完全同意。像Linus這樣的大牛,操作系統這樣既深又廣的問題,他都覺得用C語言這樣典型的面向過程的語言,就可以輕易拿下,他倒覺得像C++這樣的語言的OO,純是添亂。

復雜度當然是相對的,但當我們面臨,或者說期望的復雜是指“廣度”上的復雜度時,普通教程上的那種一桿子想把C++語言捅到底的教學內容與教學方式,就顯得非常的不夠用了。寫一個“俄羅斯方塊”的程序,就是一個“相對復雜”的問題。翻開一本《C++ Primer》,740多頁,如果僅僅從C++語言知識點來看,任何一個學到第227頁的讀者,都應該要開始動手寫一個俄羅斯方塊的程序。因為那時候他已經懂得多維數組,于是可以定義出方塊數據;他已經懂得if判斷,于是寫得出碰撞判斷;他已經學會for循環,于是知道如何消掉被填滿的一行或多行……

有人覺得我這是“忽悠”。他們又改口說,“俄羅斯方塊”是一個太復雜的問題了,如果學生在學習半途花上一個月時間去搞一個俄羅斯方塊,會節外生枝,徹底打亂原來學習計劃云云。好吧我承認確實存在苦研十年軍事理論,然后殺上戰場一舉成名的將軍;但我更愿意相信多數將軍是不斷地打一場場小戰役,不斷地在晚上挑燈看《武穆遺書》的過程中成長起來的。而我也確實看到那些在一個月中,被“俄羅斯方塊”程序搞得頭破血流,并堅持下來的學生,確實在日后遇上問題時,有著更好的“糾纏”能力。試想一下吧,學完《C++ Primer》200多頁時,像樣的問題都沒遇上一個,卻要再翻過那么一百多頁,然后開始學習“第三部分 類和數據抽象”。

我用《C++ Primer》當教材當老師,不是一次兩次了,但每當我開始兜售“面向對象的本質不是封裝、不是派生、不是多態,而是抽象”時,我總覺得自己是那么無力。底下的戰士,他們沒有打過任何一場像樣的戰役,但他們希望在課堂上成長為巴頓,成長為陳庚。

在那一時,我總會想起C++之父痛心地說到C++教育的一句話,大意是說:現在C++教育似乎進入了一個怪圈:要教會一個人C++,唯一的辦法,就是把他教成C++高手。我在從事C++教育時,很長時間,發現自己一樣落在怪圈里!長嘆。

(以上內容,任何有正常理智或心態的人,都不會認為:本文作者在說《C++ Primer》是一本差書。)

對一個初學者,學完《C++ Primer》227頁之后,動手寫一個俄羅斯方塊游戲,復雜在哪里?

(一),C++初學者(沒有其它語言學習經驗)那時剛剛把類型、變量、數組、指針、if、for………裝入腦里,每一個知識點都才剛剛開始消化,這時要把這一切摻合到一起,去解決一個真正的問題,就像一個剛剛看完《高爾夫球桿使用說明》的人上了場,那個亂勁兒!

(二),沒有人會覺得寫一個字符界面的俄羅斯方塊很爽,所以總得要去碰一下圖形用戶界面的編程知識吧。窗口、菜單、定時器、消息、GDI,資源文件……媽啊。就這一點就夠廣的。

(三)、教材里那些花花草草小貓小草的例程,也確實拿來過調試,什么單步跟蹤、什么斷點、什么變量觀察……還有什么條件編譯、二分法、以及如何使用Windows的調試API,比如“OutputDebugString”函數等等,平常老師在臺上講,我們都覺得需要那么多調試方法嗎?現在可好,程序好不容易編譯通過,一運行就死了,一頭霧地才開始想如何調試……

公元一九八九年,有人問總設計師說中國十年改革開放最大的失誤是什么?他說是教育。(公元2008?)有人問C++之父,十數年,C++語言最大的失誤是什么?Stroustrup說,也是教育。這個“也”字純屬我加的。原文得是這樣:

Stroustrup Says C++ Education Needs To Improve :

“在C++的早期,我很擔心不能足夠快的教好教師。我有理由擔心,因為許許多多明顯的C++的錯誤使用都可以追蹤到教育者自身對基礎的誤解。我未能足夠清晰的闡述我的想法和原理。”Stroustrup表示,“我避免傳授‘如何思考’,我猜想最好的教育之法是使用大量優秀的例子。”

沒錯,如果可能,就永遠別去教學生如何“面向對象”,而是要讓他們陷在問題的海洋里,再加上有力的引導,最終讓他們自己悟出面向對象的真諦。

如果我有兒子。當他成長到對愛情似懂非懂的青澀年齡時,我不想對他講一堆什么愛情啊責任啊的大道理。我也不希望他談第一個女朋友,就馬上順利地步入婚姻,我希望如果可能,他最好遇上些嫌貧愛富的女人,遇上些虛榮乖張的女人,然后被女人拋棄過,或拋棄過別人,然后命運再安排他遇上他的灰姑娘。

花花公子,情海里幾度沉浮,不輕易付出感情的男人,通常比那些遇上第一個女人就愛得死去活來的青澀男孩,更懂得愛情的真諦,在婚后也往往更不會愛上別的女人。為什么,因為隨便碰上個異性就愛得死去活來的人,通常他們愛的不是人,他們愛的是“愛情”這個東西,就算他們其實沒有足夠了解愛情中另一個人。

作為C++程序員,碰上任何一個問題,就要來扯上一通“面向對象”如何如何的人;在碰上真正問題時,往往比那些懂得簡單問題簡單解決的人,掛得早。因為他們的出發點是愛上了“面向對象”,而不是了解所要解決的問題。

同樣的,作為一個C++愛好者,你可以愛上C++,但作為一個程序員,請別輕易說,我愛上了一門語言。愛容易讓人盲目;一個盲目的fans,是有力量的,他全身心地投入了學習,真好;但一個盲目的程序員,是可怕的,他會以為,C++和愛情一樣,無所不能。

但具體到我個人,我有我的堅持,我決不愿意把我的學生培養成C++的粉絲(但,成為C++之父BS的粉絲,我熱烈支持:)。相反,我會“折磨”他們,《白話 C++》中的第二章《準備》,已經成功地讓很多學習者,發出哀怨:“學習C++,有必要去安裝、編譯這么多庫嗎? 還是Java好,一切都準備好了。”

《準備篇》的緒言,是一句煽情的話:“決定你能否成為程序員,不在于你的計算機基礎,在于你是否有足夠的耐心。”

現在社會,有些女人或男人,會同時和幾個異性談戀愛,他們是勢利的。我當然也反對這種不道德的行為。但如果是學習語言(無論是編程語言或自然語言),如果你有能力,我建議完全可以同時學習兩門,學習上越“勢利”越好,而有能力時,同時學習多門語言,那是相當的有利可圖,具體有機會再展開。通常一個人對在C++語言熟練之后,就具備了這個能力。對于從沒有學習過其它編程語言的初學者,同時學習C++語言之外,還要學習另一門,不現實。但是,當我們僅僅限定C++編程的范疇,那就一定不能癡癡,長期地把精力和愛心都放在語言自身上。

C++之所以復雜,是因為C++的“深度”與“廣度”都很深遠,但是遵循“有一定深度,擴大廣度,有一定廣度,加深度”的方法,會發現C++的“深度”與“廣度”會成為我們編程中的一點樂趣。希望本文會給讀者帶來收獲。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C++
    C++
    +關注

    關注

    22

    文章

    2108

    瀏覽量

    73618

原文標題:從深度和廣度談C++的復雜度

文章出處:【微信號:C_Expert,微信公眾號:C語言專家集中營】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C++避坑指南

    C++是一門古老的語言,但仍然在不間斷更新中,不斷引用新特性。但與此同時 C++又甩不掉巨大的歷史包袱,并且 C++的設計初衷和理念造成了 C++異常
    發表于 09-15 09:04 ?562次閱讀

    C語言與C++的區別

    在很大程度上,C++C的超集,這意味著一個有效的C程序也是一個有效的C++程序。
    發表于 09-16 10:20 ?1149次閱讀

    CC++中const的用法比較

    #define一樣不占空間,但擁有類型安全檢查和作用域控制)。因此上述不能編譯通過的C代碼,在C++中可以順利地通過。當不需要分配空間時(這依賴于數據類型的復雜度和編譯器的智能化程度)
    發表于 11-11 10:00

    c++程序設計語言題解

    c++程序設計語言題解是與Bjarne Stroustrup的《C++程序設計語言》一書配套使用的習題解答,為C++程序設計
    發表于 09-05 16:00 ?121次下載
    <b class='flag-5'>c++</b>程序設計語言題解

    C++課件、習題及答案

    *1.1  CC++*1.2  最簡單的C++程序 1.3  C++程序的構成和書寫形式&nbs
    發表于 09-08 09:35 ?108次下載
    <b class='flag-5'>C++</b>課件、習題及答案

    詳述不用c++寫網頁的理由

    C++在web開發中地位如何,進來一探究竟吧。
    的頭像 發表于 12-22 10:07 ?5947次閱讀

    如何C轉向C++ Effective C++ PDF中文版教材免費下載

    對每個人來說,習慣 C++需要一些時間,對于已經熟悉C 的程序員來說,這個過程尤其令人苦惱。因為CC++的子集,所有的C 的技術都可以繼
    發表于 01-10 16:48 ?0次下載

    C++程序設計教程之C++的初步知識的詳細資料說明

    C++程序設計教程之C++的初步知識的詳細資料說明包括了:1. CC++,2 . 最簡單的C++
    發表于 03-14 14:48 ?31次下載
    <b class='flag-5'>C++</b>程序設計教程之<b class='flag-5'>C++</b>的初步知識的詳細資料說明

    如何深度解析C++拷貝構造函數詳細資料說明

    本文檔的主要內容詳細介紹的是如何深度解析C++拷貝構造函數詳細資料說明。
    發表于 07-05 17:41 ?0次下載
    如何<b class='flag-5'>深度</b>解析<b class='flag-5'>C++</b>拷貝構造函數詳細資料說明

    如何使用Borland C++ Builder6.0開發OpenCV的程序

    本文檔的主要內容詳細介紹的是如何使用Borland C++ Builder6.0開發OpenCV的程序。
    發表于 05-26 17:32 ?14次下載
    如何使用Borland <b class='flag-5'>C++</b> Builder6.0<b class='flag-5'>來</b>開發OpenCV的程序

    C語言與C++相互調用

    ? ? 1CC++相互調用 在一個嵌入式系統中大部分的底層和驅動層更多的是采用C語言進行開發,而上層應用、服務更多的采用C++等高級語言
    的頭像 發表于 01-18 11:05 ?3329次閱讀
    <b class='flag-5'>C</b>語言與<b class='flag-5'>C++</b>相互調用

    EE-128:C++中的DSP:C++調用匯編類成員函數

    EE-128:C++中的DSP:C++調用匯編類成員函數
    發表于 04-16 17:04 ?2次下載
    EE-128:<b class='flag-5'>C++</b>中的DSP:<b class='flag-5'>從</b><b class='flag-5'>C++</b>調用匯編類成員函數

    測量深度廣度判斷AI算法的潛力

    算法的潛力會受到感測能力的限制。開爾文勛爵曾經的名言至今仍不過時――“無法測量,則無法改進”。要想了解 AI 的真正能力,請務必從分析其測量的廣度深度開始。
    的頭像 發表于 01-16 09:33 ?697次閱讀

    深度解析C++中的虛函數

    虛函數作為C++的重要特性,讓人又愛又怕,愛它功能強大,但又怕駕馭不好,讓它反咬一口,今天我們用CPU的角度,撕掉語法的偽裝,重新認識一下虛函數。 虛函數是C++實現面向對象設計及多態特性
    的頭像 發表于 02-15 11:14 ?827次閱讀
    <b class='flag-5'>深度</b>解析<b class='flag-5'>C++</b>中的虛函數

    C++的引用和指針

    之前的文章我們已經介紹了C++中的基本類型如int,bool和double等,除了基本類型C++還有一些更復雜的數據類型復合類型,所謂的復合類型就是通過其他類型定義的類型,本篇文章我們將會著重介紹
    的頭像 發表于 03-17 14:00 ?629次閱讀
    主站蜘蛛池模板: 牢记永久免费网址| 天天色天天干天天| 攻把受做哭边走边肉楼梯PLAY| 天天影视网网色色欲| 吉吉av电影| 狠狠色香婷婷久久亚洲精品| 99久久国内精品成人免费| 最美白虎逼| 5g在线视讯年龄确认海外禁止进入| 一色狗影院| 美女扒开尿口让男生添动态图| 色翁荡熄月月| 中文字幕人成人乱码亚洲影视S| 成人在线视频免费| 精品亚洲一区二区在线播放 | 亚洲一日韩欧美中文字幕在线| 9420高清免费观看在线大全| 国产乱码免费卡1卡二卡3卡四卡 | 日本边添边摸边做边爱边| 亚洲熟妇AV乱码在线观看| 成人在线观看国产| 久久婷五月综合色啪网| 午夜国产视频| MD传媒在线观看佳片| 久久才是精品亚洲国产| 偷拍精品视频一区二区三区| 60岁老年熟妇在线无码| 国产在线观看成人免费视频| 日本高清无卡码一区二区久久| 在线 国产 欧美 亚洲 天堂 | 我的漂亮朋友在线观看全集免费| 97色香蕉在线| 精品国产中文字幕在线视频| 少妇厨房愉情理9伦片视频| 99久热精品免费观看| 久久精品国产免费播放| 羞羞麻豆国产精品1区2区3区| 阿片在线播放| 免费无码又爽又黄又刺激网站| 亚洲一区免费香蕉在线| 国产日韩亚洲专区无码|