當前位置:首頁 » 編程軟體 » dc編譯器

dc編譯器

發布時間: 2022-08-16 00:25:59

① //dc.SelectObject(pOldPen); dc.SelectObject(*pOldPen); 有什麼區別

呵呵,C++就是經常有這種細小的trick。所以才會有人說C++是最復雜、最充滿奇怪技巧與陷阱的語言。

你這個問題很簡單,其實就是函數重載和操作符重載共同作用的結果。

看看CDC::SelectObject的定義就知道了,它有諸多函數重載。它不僅可以接受CPen*、CBrush*、CBitmap* 等各種CGdiObject的指針作為參數,還有另外一個很重要的重載是接受一個句柄:HGDIOBJ作為參數的。也就是說你可以把一個HGDIOBJ句柄作為參數送給SelectObject。

再看看CPen類,它則是繼承自CGdiObject。而CGdiObject則重載了類型轉換操作符,也就是operator HGDIOBJ()。這樣一來,在需要HGDIOBJ語境的情況下,這個對象可以自動被轉換成HGDIOBJ。

明白了吧?你的第二種寫法,最後編譯器是這么認為的:
先調用*pOldPen上的operator HGDIOBJ轉換函數,將這個對象轉換成HGDIOBJ類型返回,然後再調用dc.SelectObject(),傳入剛才轉換出來的HGDIOBJ句柄。所以仍然是可以正常編譯通過的。
其實你如果在你SelectObject那句下一個斷點,單步調試跟蹤一下的話,你也就能看到這個過程了:程序會先走到CGdiObject::operator HGDIOBJ()裡面,返回一個句柄,然後再走到CDC::SelectObject(HGDIOBJ hObject)裡面。這個流程就很清晰了。

呵呵,C++中經常會有許多讓人眼花繚亂的奇怪用法,有許多甚至達到了匪夷所思的地步,上面的這個只不過是最簡單的一個trick罷了。有各種奇特的技巧被後人不斷挖掘出來,難怪有人說 「C++是唯一一門語言之父還要別人教他怎麼使用的語言」。 -_-b

② 誰能詳細說明一下編譯器自動調用類型構造函數進行類型轉換的原理

StrCell sc = dc + dc; 這條語句執行時調用StrCell的構造函數,與StrCell sc(dc + dc);相同。
它們都需要這樣的構造函數:StrCell(const DblCell &dc);

類型轉換是把一種類型轉換為另一種不同的類型,而源代碼中的構造函數接受的就是DblCell參數,所以StrCell sc = dc + dc;嚴格來說不算是類型轉換。

假如構造函數是StrCell(const StrCell &dc); 這個時候就需要把DblCell轉換為StrCell,此時存在一個類型轉換。

因為要把DblCell轉換為StrCell,所以需要在類DblCell中定義一個類型轉換運算符:operator StrCell(); 它的作用就是把DblCell轉換為StrCell,這個函數是成員函數,不需要參數,也不需要在函數聲明時顯式寫出返回值,當然該函數仍然要返回一個值。

有了這個運算符後,編譯會對StrCell sc = dc + dc;做擴展:
1. 生成臨時變數var1保存dc + dc的結果。
2. 調用var1.StrCell()這個運算符函數把var1轉換為類型StrCell,運算符函數的返回值將成為一個臨時變數var2。
3. 調用sc的構造函數,並傳入var2。
4. 結束。

③ C++編譯器一定要按裝英文版本的嗎

編譯器的核心實際上是命令行的,無所謂英文版(命令行只認英文)。
如果是IDE,很多都有漢化版的。當然不一定要裝英文版。
不過VC++6的話,漢化質量實在太差(據說還有莫名其妙的BUG),還不如用英文版。
Microsoft Visual Studio中帶VC++,有官方中文版。LZ可以下個VS2008 Team Suite。不過文件相當大,對於新手來說不怎麼實用。
Dev-C++比較小,對標準的實現也比較好,不過調試功能很爛。
C-Free應該也可以用。
像Turbo C++就太老了,不推薦。

④ 為什麼我的visual C++6.0總是死機

有些是電腦的硬體與VC6.0要求的不一致導致的, 也有的是編譯器太小造成的!VC對電腦的硬體要求比較高,稍不慎就容易死機,最好就是安裝DC編譯器,這個編譯器要求較低,一般根本就不會死機!
建議:安裝DC,如果覺得DC有點低級,就換成BC!

⑤ 推薦個好用的c語言編譯器我是C語言初學者

我不同意上面兩人的說法。Tc可以說是較老的了,而且它出現時寫C是用C90標準的,並且允許不加部分頭文件,而且用起來也很不方便。winTC用的是tc的內核,雖然有了界面,支持復制粘貼等操作,但它的允許不加部分頭文件不是方便,卻可能成為影響你的原因。你第一次打開時它也說寫代碼要注意標準的寫法。但不加頭文件表明你寫的代碼在這個編譯器可以編譯,但轉到別的編譯器就不行了。而你如果習慣了的話,以後寫一些軟體,用到其它的編譯器時,它提示錯誤你還不知道哪裡錯。事實上,以前譚浩強的書第二版就使很多人都犯了這樣的錯誤,許多人都按書上的代碼,在TC2.0可以運行,但到其它的如VC++等,那些代碼都不能用了。而且winTc都沒有調試的功能。當你寫上百行的代碼時,像指針的一引動錯誤或數組越界,或數值溢出,沒有調試功能查看變數的話,想找出錯誤是很難的,而這些錯誤,編譯器是不報的。推薦的軟體有dev-C++用的是linux的Gcc內核, http://u.115.com/file/f69e189f52
devcpp-4.9.9.2.rar http://u.115.com/file/f6dcf25d9ecodeblocks-8.02mingw-setup.exe 還有VC++,不過它很大塊。當然c-Free的調試功能也很好用的。

⑥ DC編譯器里編譯之後報ERROR的框框不見了

視圖里找找?

⑦ 學C語言現在最好用的編程軟體

Turbo C就可以的。編輯文本的時候可以用utraledit
至於vc++之類的我是不推薦初學者使用的

熱點內容
車貸解壓幾天能辦完 發布:2022-09-28 18:39:08 瀏覽:494
c語言一個位元組 發布:2022-09-28 18:38:54 瀏覽:868
中等吃雞的電腦需要什麼樣的配置 發布:2022-09-28 18:29:07 瀏覽:98
晉城網吧哪個配置高 發布:2022-09-28 18:28:28 瀏覽:204
特崗照片怎麼上傳 發布:2022-09-28 18:26:53 瀏覽:436
安卓手機字體如何製作 發布:2022-09-28 18:25:42 瀏覽:128
南京編程培訓機構 發布:2022-09-28 18:25:36 瀏覽:934
linux安裝oraclerac 發布:2022-09-28 18:24:22 瀏覽:921
魔獸世界測試服伺服器地址 發布:2022-09-28 18:24:19 瀏覽:252
android面試的自我介紹 發布:2022-09-28 18:13:39 瀏覽:526