音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

閑扯C++ ——觀宇宙飛船帖有感

作者:赤鑄 欄目:單片機
閑扯C++ ——觀宇宙飛船帖有感
我11年前開始用C++。但最早打工的公司(就是做CAXA電子圖板的那個)當時用的是C。后來干單片機了,也用不上。有PC端程序,也用的是Delphi(開發(fā)速度快)。所以到今天也沒真正用C++寫過大程序。但在設(shè)計思想上,我還是一直盡量“OOD”的,所以也在C++的問題上,自覺有一點發(fā)言權(quán)。

先讓我們看看C++的兩個重要特點:
1. 適度的面向?qū)ο。與一些比較“純粹”的OOP語言(不論是早期的Smalltalk還是新潮的Java)相比,C++中的面向?qū)ο箫@得很不完全,因為它沒有虛擬構(gòu)造函數(shù)、沒有類屬(用模板代替)、沒有動態(tài)數(shù)據(jù)類型、沒有自動內(nèi)存管理,保留了指針、全局對象和全局函數(shù),等等。這些還是從效率和實用出發(fā)的,這也是我最欣賞C++的地方:直面現(xiàn)實,不沉迷于理想主義。
2. 基于文本替換的實例化機制。C++中的模板,本質(zhì)和C語言中的宏一樣,都是文本替換,都是為了在代碼重用的同時保證效率。
所以,盡管總有人說要把C++看作全新語言,不要看作C語言的“改良”,但C++在骨子里仍然是C語言的繼承者——它繼承的是C的靈魂:實用主義,注重效率,行文簡潔優(yōu)美(教科書上總說Pascal語法優(yōu)美嚴謹云云)。

看來Microsoft也領(lǐng)會到了這個,也不枉它們使用C語言一場。從早期Windows的那些.h,到后來的MFC,都能反映這一點。這恐怕也是Microsoft早期的成功法寶之一。要知道,早在那個號稱“劃時代”的Windows95“橫空出世”之前很久,這地球上就已經(jīng)誕生了可以與后來的WindowsXP,至少是98相媲美的交互圖形用戶界面了。但是Microsoft卻能在PC機上照貓畫虎,所以它大獲成功(當年也有人對PC很不屑,所以他們相對失敗了)。由此也可見,Microsoft成功的關(guān)鍵,并不在于技術(shù)本身,而在于市場頭腦,在于技術(shù)服從市場。當然,更深層次的原因是PC行業(yè)崛起這個時代大背景。

總之,作為編程技巧和奇思妙想的范例(我統(tǒng)稱這類東西為《九陰真經(jīng)》下半部),Microsoft的代碼的確不錯。但是,如果你想成為真正的高手,而不僅僅停留在黑風(fēng)雙煞的級別,就必須從《九陰真經(jīng)》上半部,從真正的C++語言,從設(shè)計思想和體系結(jié)構(gòu)開始。

上半部的基本組成:
1. B.S.(C++的發(fā)明者)著《The C++ PROGRAMMING Language》。(多霸氣的書名!)
2. 面向?qū)ο蟮恼嬲A(chǔ)。推薦Bertrand Meyer的《Object-Oriented SOFTWARE Construction:2nd Edtion》?赐赀@個,你就知道OOP/OOD/OOS之類到底是什么。
3. Erich Gamma等,設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ),機械工業(yè)出版社,2000。想知道軟件到底應(yīng)該怎么設(shè)計?看這本書就可以了。

即使只做嵌入式(特指低端嵌入式)開發(fā),上述精神財富也絕對是大有裨益的。


2樓: >>參與討論
chunyang
好帖!
 
3樓: >>參與討論
hotpower
哈哈,一個外星人搞的"全球C++大戰(zhàn)"...
搬個小凳學(xué)習(xí)學(xué)習(xí)...

4樓: >>參與討論
taoest
OOP
OOP只是一個概念。設(shè)計的時候,心理一定要想著OOP,其實,心里想東西的方式都會變成OOP了。
C++只是一個工具,他與C比也就多了一些東西。如果你心里有OOP,用標準C 也能寫出OOP的東西來。
OOP是方法,不是語法。

5樓: >>參與討論
宇宙飛船
超級形象,原來我倒過來練功了!樓主分析的精妙之處擇錄如下
1. 適度的面向?qū)ο。與一些比較“純粹”的OOP語言(不論是早期的Smalltalk還是新潮的Java)相比,C++中的面向?qū)ο箫@得很不完全,因為它沒有(抽象?)虛擬構(gòu)造函數(shù)、沒有類屬(用模板代替)、沒有動態(tài)數(shù)據(jù)類型、沒有自動內(nèi)存管理,保留了指針、全局對象和全局函數(shù),等等。這些還是從效率和實用出發(fā)的,這也是我最欣賞C++的地方:直面現(xiàn)實,不沉迷于理想主義。
2. 基于文本替換的實例化機制。C++中的模板,本質(zhì)和C語言中的宏一樣,都是文本替換,都是為了在代碼重用的同時保證效率。
所以,盡管總有人說要把C++看作全新語言,不要看作C語言的“改良”,但C++在骨子里仍然是C語言的繼承者——它繼承的是C的靈魂:實用主義,注重效率,行文簡潔優(yōu)美(教科書上總說Pascal語法優(yōu)美嚴謹云云)。
//----------------------------------------------------------------

樓主的分析正是我當時放棄PASCAL同JAVA的的再一次復(fù)習(xí)!樓主的精妙見解!

不知哪位自認為是高手的朋友能把樓主的導(dǎo)論駁倒。。。。?

注:修正一個致命的錯誤。


* - 本貼最后修改時間:2005-7-9 10:44:07 修改者:宇宙飛船

6樓: >>參與討論
宇宙飛船
樓主的以上精妙分析,希望對C++沒有印象的朋友認真默讀
10000000000.......遍,作用為C++ 的最高心法!

7樓: >>參與討論
hotpower
好看...
 
8樓: >>參與討論
stintair
學(xué)習(xí)中
凡事追求精藝求情

9樓: >>參與討論
pheavecn
怎么會沒有虛擬構(gòu)造函數(shù)呢?
看看BCB中TButton的構(gòu)造函數(shù)定義:
__fastcall virtual TButton(Classes::TComponent* AOwner);


10樓: >>參與討論
潛艇8421
又見到一個超級高手浮現(xiàn)!
顯示C++ 太精深了。。。

11樓: >>參與討論
潛艇8421
沒有虛擬構(gòu)造函數(shù)應(yīng)該改為==》沒有虛擬抽象構(gòu)造函數(shù)!
 
12樓: >>參與討論
zhousd
超級高手真多,樓主太大意打漏了兩個字,整體分
析不知還有哪位自認是大師能駁倒!是大師的請站起來說話!

搬凳子坐著觀戲,呵呵。。。!

好戲連場。。。

13樓: >>參與討論
宇宙飛船
的確是有錯,希望樓主能在主貼中作修正!
 
14樓: >>參與討論
農(nóng)民講習(xí)所
拿著磚頭,不知道砸誰好
 
15樓: >>參與討論
宇宙飛船
請問這個是不是還要受砸:沒有動態(tài)數(shù)據(jù)類型?
目前的C++編譯器已支持動態(tài)類型識別,RTTI機制。

16樓: >>參與討論
wolaiye3
偶也在學(xué)習(xí)中
 
17樓: >>參與討論
赤鑄
支持虛擬構(gòu)造函數(shù)和RTTI的其實是Object Pascal
我所說的C++是“標準”C++(當然,C++的一個致命問題就是標準的姍姍來遲)。C++在發(fā)展,具體的編譯器廠家也會做各種擴充,所以必須限定個范圍。由于C++的復(fù)雜性(這與它的簡潔性并不矛盾,正如美國佬集強權(quán)和公正為一體的特性一樣),完整實現(xiàn)C++的編譯器并不多,反正Visual C++就不夠?qū)I(yè)(到6.0為止,后來的我不了解,但鑒于Microsoft后來的精力在.net而不在Virsual xxx上,估計不會有什么改進)。BCB不僅號稱完整支持C++,而且增加了一些重要的特性,包括虛擬構(gòu)造函數(shù)和RTTI。根源在于BCB的基礎(chǔ)是Delphi(VCL)。為了支持VCL,不得不實現(xiàn)Object Pascal中的相關(guān)特性。

人們通常所說的C++的“虛擬構(gòu)造函數(shù)”其實并不是BCB中那種"virtual"的constructor,而是一種間接實現(xiàn)。至于RTTI,號稱支持RTTI的C++編譯器越來越多,但跟Object Pascal中的根本不是一個層次。Object Pascal的RTTI類似于Java/C#中的Reflection,是一種“高級”的運行期類型機制。標準C++中的RTTI只能得到類名稱(具體編譯器的擴充也很有限),而Object Pascal中的RTTI卻可以得到類名稱、類繼承關(guān)系、對象實例大小,還有屬性、方法等信息。


* - 本貼最后修改時間:2005-7-9 19:38:20 修改者:赤鑄

18樓: >>參與討論
汽車電子
嵌入式程序有標準可言嗎?全都是擴展的C/C++,或...
   個人認為,程序代碼量為K級的,根本沒必要用C++;代碼量為M級的,才用C++比較好...

19樓: >>參與討論
pheavecn
赫赫,赤鑄兄對OOP研究的很透呀。
科班出身吧?
我是半路出家搞得BCB,OOP也是半桶水來的。



20樓: >>參與討論
IceAge
盡管可以間接實現(xiàn),標準C++ 沒有虛擬構(gòu)造函數(shù)
虛擬函數(shù)是為了實現(xiàn)通用接口,并不需要知道具體的派生類類型。而構(gòu)造函數(shù)則必須確切了解細節(jié),以便正確的初始化。
Borland,microsoft 為了自己的方便,都對 ISO C++ 做出了擴展。

關(guān)于 BCB, 這里有一些文章:
http://www2.borland.com.tw/tw/nw03111001.html
http://bbs.openlab.net.cn/ShowThread.aspx?PostID=193482


21樓: >>參與討論
路過看看
是不是久經(jīng)考驗的飛船?
 
22樓: >>參與討論
dontium
原來樓主對VC的研究也頗深
 
23樓: >>參與討論
宇宙飛船
反正Visual C++就不夠?qū)I(yè),到6.0為止???
VC++6不夠?qū)I(yè)嗎?

假如用電子電路來等效:VC++6 的MFC架構(gòu)的實現(xiàn)相當于分立的TTL,CMOS電路模塊組成的微處理器,Object PACASL 的編譯器相當于單片大規(guī)模集成的微處理器。

用分立TTL,CMOS,IC做的微處理器功能模塊電路我們能夠很好地深入學(xué)習(xí)CPU的原理。

MFC之所以有研究價值,就是因為并沒有把這些功能完全集成在編譯器中,VC++6 編譯器本身已有RTTI 功能,但MFC 并沒用編譯器的功能,而是用另一種方法實現(xiàn),這正是我們應(yīng)該學(xué)習(xí)研究的地方。

貼主在主貼內(nèi)容上講C++沒有虛擬構(gòu)造函數(shù),這很容易誤導(dǎo)C++ 初學(xué)者,虛擬是C++ 很重要的特性,是效率,是方便程序設(shè)計的接口,是編譯器本身要做的事。

24樓: >>參與討論
宇宙飛船
懂‘C’就直接用API來的快,又穩(wěn)定!
把一個最小的WINDOWS ‘C’(SDK) 程序弄透了(一兩天的事),再準備一本API手冊,就可以為所欲為了!

25樓: >>參與討論
hotpower
我是加盲,但AVR好象不玩過家家確實不夠意思
 
26樓: >>參與討論
宇宙飛船
RE lufeijian ,API就是煩,
用C++ 可以直接用ATX 控件(我可沒做過).

27樓: >>參與討論
lufeijian
再次謝謝各位,日后有麻煩再來請教各位!
這里的高手多,熱心的人也多!心里是那個高興。‖F(xiàn)在比以前熱了不少。。。

28樓: >>參與討論
赤鑄
補充
“反正Visual C++就不夠?qū)I(yè),到6.0為止”
看清楚上下文,我指的是“在完整實現(xiàn)C++方面不夠?qū)I(yè)”。與之相比,BCB完整的多。

至于RTTI,可能我上面說的不夠明確,我認為VC里面那種RTTI算不上真正的RTTI。(而且我認為按照C++的設(shè)計思想,這種東西也不是很必要)

我11年前用的是Watcom C/C++,當時(可能至今仍然)是代碼優(yōu)化最牛,調(diào)試器功能最強大(不等于最方便)的C/C++開發(fā)工具。你們見過別的調(diào)試器可以“倒著”執(zhí)行代碼的嗎?呵呵

29樓: >>參與討論
赤鑄
另外,類屬可不是類
類屬是類似C++的template的東西,有點“參數(shù)化的類”的意思
C++沒有元類(類似Object Pascal中的TClass的東西),也就不可能支持類屬
template功能比類屬簡單,但效率更高,還是體現(xiàn)了它的設(shè)計初衷

30樓: >>參與討論
dpjmxd
本論題感覺赤鑄最深入了解C++
其它人都是了解一點皮毛(包括我一個),向赤鑄同志學(xué)習(xí)!天天向上。
呵呵!

31樓: >>參與討論
yadog
c++相關(guān)
先在這里mark一下

32樓: >>參與討論
hgem
學(xué)習(xí)學(xué)習(xí)
 
33樓: >>參與討論
yzh4531
怎么做虛擬儀器,用vc++!哭求例子
怎么做虛擬儀器,用vc++!哭求例子

34樓: >>參與討論
dable_hn
為何要用VC做虛擬儀器呢?
其實即使用VC開發(fā)虛擬儀器也得有板卡的驅(qū)動,這樣和開發(fā)普通的程序區(qū)別已經(jīng)不大,跟硬件打交道變得很簡單了。
但反過來,有了驅(qū)動用LabWindows開發(fā)程序也很簡單,簡直比VC還簡單,況且LabWindows提供的界面和信號處理函數(shù)都使虛擬儀器開發(fā)變得什么簡單。為何非要VC實現(xiàn)那華麗的界面和復(fù)雜的算法呢?

35樓: >>參與討論
jackf125
實用就行
實用就行

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請介紹本深一點單片機C語言方面的書
問:idata,pdata和xdata代表什么意思?
UART的全雙工是不是接受發(fā)送互不影響?
QFP封裝的單片機怎樣把程序燒寫到里面去?
請教:單片機去藕電容是優(yōu)先靠近VCC放還是GND啊
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號