當前位置:編程學習大全網 - 編程語言 - 如何用VC制作壹個簡單的小程序(詳見問題)

如何用VC制作壹個簡單的小程序(詳見問題)

妳好!

雖然有點多,但對妳總是有好處的。看的越多,得到的好處就越多。嗯。多有趣啊

與C語言相比,c++語言引入了兩大新事物,壹個是面向對象(具體來說就是類)

),另壹種是模板技術(模板編程或者泛型編程是壹種非常流行的技術,雖然現在還在C #中

不支持泛型編程,但相信以後會增加這個功能),模板在C++中更復雜

雜七雜八的部分,但是作為壹個真正的c++程序員,這部分是非常重要的。尤其是對於c++標準庫。

掌握尤為重要。

剛開始的時候,不要撲向VC裏的各種奇才和設計師。因為它依賴於開發環境生成的大量代碼

會讓我們很困惑,也不利於學習c++語言本身。我的建議是生成壹個空的控制臺工作器。

程,然後自己給它添加文件。

下面是壹個簡單的控制臺程序:

//robindy/list.cpp

#i包括

#i包括

使用命名空間std

int main()

{

列表coll

for(char c = ' a ';c & lt= ' z++c)

{

coll . push _ back(c);

}

list::const _ iterator pos;

for(pos = coll . begin();pos!= coll . end();++位置)

{

cout & lt& lt*pos <。& lt' ';

}

cout & lt& ltendl

返回0;

}

用於使用命名空間std解釋:

名稱空間是指各種可見的標識符範圍。c++標準庫中的所有標識符都在名為std的名稱空間中定義。

由於命名空間的概念,當使用c++標準庫的任何標識符時,有三個選項:

1.直接指定標識符。例如,std::ostream代替ostream。完整的語句如下:

STD::cout & lt;& ltSTD::hex & lt;& lt3.4 & lt& ltSTD::endl;

2.使用using關鍵字。

使用STD::cout;

使用STD::endl;

上面的程序可以寫成

cout & lt& ltSTD::hex & lt;& lt3.4 & lt& ltendl

3、最方便的是使用命名空間std這樣,名稱空間std中定義的所有標識符都是有效的(公開的)。就像它們被聲明為全局變量壹樣。那麽上面的語句可以寫成這樣:

cout & lt& lt十六進制& lt& lt3.4 & lt& ltendl

這個程序使用標準的模板庫在屏幕上打印字符a~z,其中只有兩種主要功能用

只有以下兩種被c++標準委員會接受的編寫方法才是符合c++標準的,並且是可移植的。即:

int main()

{

}

int main(int argc,char* argv[])

{

}

C++在main()末尾定義了壹個隱式返回0;但是return語句必須用VC顯式編寫。

在BCB,妳可以編譯而不用寫return。

這個程序使用STL:鏈表中的容器。首先,在鏈表中插入26個字母,然後遍歷鏈表並輸入。

打印字符。

我不建議初學者壹開始就從模板庫入手,但我建議應該循序漸進,有意識地學習模板庫。諸如

要熟悉cout和cin(位於iostream)的用法,減少老C函數庫中printf和sc的使用。

Anf等。

從控制臺開始的好處是避免我們去了解VC中向導等工具生成的其他代碼,以及整個程序的流程。

非常清楚。初學者學習VC的壹個難點就是搞不清楚整個程序的流程(從那個語句開始,那麽

退出該語句。MFC做了太多的封裝來掩蓋真相。通過控制臺,我們可以快速

學習c++語言的許多新特性。比如類的封裝、繼承和多態。通過這壹時期的學習,我們應該

能夠掌握三樣東西:C++關鍵詞、語法(側重於面向對象和模板)和c++

標準庫(剛知道怎麽用,要徹底掌握需要大量的時間和精力)。至於界面相關的

東東(MFC很大壹部分都和接口有關,所以我覺得MFC臃腫又無聊!回頭看看之前。

用MFC寫的程序有壹種“垃圾”的感覺。)

自己做個測試:

寫壹個控制臺程序,體現類繼承,函數重載,動態多態(虛函數實現)。

數據封裝與c++標準庫的應用。

如果妳能輕松搞定,恭喜妳,妳已經通過c++語言了。但是c++真的很復雜。

東東有各種奇怪的語法現象。如果妳沒有三五年的技術,不要說妳懂C+

+。^_^。

推薦書籍《C++中的思維》(如果有精力可以直接看原文)。

《基礎C++》

本來打算繼續講如何進入c++世界,但是想了想,覺得還是要先解決壹個問題。

問題:為什麽要學C++?我認為在軟件開發行業,除了謀生之外,學習新的東西是最重要的。

應該以興趣為導向。所以拋開我個人對C++的偏愛,我想為妳學習C++立壹封信。

心和興趣。當初,我對自己學習c++的第壹個建議是:不要半途而廢!壹開始是利益驅動,

後來是生活必需,最後回歸興趣。畢竟我從中獲得了快感,這就足夠了。在學校

在壹個新事物出現之前,解決動機的問題是非常重要的。就像殺人壹樣,如果只是突然上升,那就等著嘗試吧。

之後就沒什麽成就感了。革命先烈為我們樹立了好榜樣,哪怕我們學的是C++

我們在路上遇到了太多的迷茫和痛苦,但畢竟我們為自己的信念付出了努力,我們知道我們在那裏。

做什麽,知道自己追求的是什麽。

c++適合什麽樣的開發?

c++是壹種廣泛應用於工業軟件研發的大型語言。具有較高的復雜性和解決問題的能力。C

++不僅在開發方面有很大的價值,在學術界也有很大的價值。關於c++的文章應該可以。

姑且形容為壹片茫茫煙海。C++的世界級經典書籍數不勝數。然而,當前的開發語言是這樣的

這個地方太繁華了,連微軟都在推出新的開發語言C #。壹個不可否認的現實是,在低階編程中。

在計算機領域,C++正在擠壓C,也在經歷C的強烈反彈,前段時間還說是微軟操作系統的源代。

代碼東東,很多還是C語言的。在高級編程領域,Java和C#正在蠶食C++

網站。也許Java和C#的狂潮最終會迫使C++回歸標準——回歸它擁有根本優勢的開發領域:

低級系統編程、高級大型高性能應用設計、嵌入式編程、通用編程和數

價值科學計算等。如果是這樣,我覺得這是壹件好事。電力系統軟件要求的高性能,以及

大規模數值計算正是c++所擅長的。就我個人而言,南瑞和魯能是參與電力系統計算的。

我們的軟件,比如PAS,是用C++開發的。在電力系統軟件開發中,c++大有用武之地。

土地。C++吸引了如此多的智力投入,以至於這個領域的傑出作品,包括重量級的軟件產品,

有數不清的圖書館和書籍。在C++之父比雅尼·斯特勞斯特魯普的個人主頁上,有壹個頁面。

列出了壹些(全部或大部分)用C++編寫的系統、應用程序和庫。

以下是壹些例子(摘自榮耀網站):

O Adobe系統:所有主要應用程序都是用C++開發的,如Photoshop &;圖像就緒

、插畫師和雜技演員等。

瑪雅:妳知道蜘蛛俠和指環王的電腦特技是用什麽軟件制作的嗎?沒錯,就

是瑪雅。

O Amazon.com:用C++開發大型電子商務軟件。

o蘋果:壹些重要的“零件”是用C++寫的。

o AT & ampt:美國最大的電信技術提供商,主要產品用C++開發。

O Google:網絡搜索引擎是用C++寫的。

o IBM:OS/400 .

o微軟:以下產品主要用C++(Visual C++)編寫:

o Windows XP Windows NT:NT4、2000 Windows 9x:95、98、Me微軟Office:Wo

Rd、Excel、Access、PowerPoint、Outlook Internet Explorer,包括Outlook Express。

Visual Studio:Visual C++,Visual Basic,Visual FoxPro。NET框架類庫采用c。

#,但是C#編譯器本身是用C++寫的。Exchange SQL Server FrontPage項目

所有遊戲......

o KDE:K桌面環境(Linux).

Symbian操作系統:最流行的手機操作系統之壹。

c++起源於C語言,我還記得很久以前學習C語言的那段時光(那是壹段快樂而充實的時光),但是

現在學c++不僅僅是給C加類,如果這樣想,就玩不好c++。

。所以c++絕不是C的升級或擴展,我們應該把c++作為壹門新的語言來學習。

比雅尼·斯特勞斯特魯普神父)。

寫程序首先希望程序能正確執行,其次是效率能被接受,再次是易於維護。c++是

壹門難學易用的語言。c++提供了太多的選擇,用c++寫程序可以

有四種思維模式:基於過程的、基於對象的、面向對象的和通用的。我們使用壹種語言來編寫程序,

並不意味著使用語言本身,換句話說,我們更多的是使用庫來編寫程序。例如

MFC,STL,ATL,VCL等等。其中,要用c++寫出結構優美、性能優秀、代碼簡潔、易於使用的代碼。

維護代碼,第壹個c++標準庫。STL對效率要求嚴格,用STL寫的程序。

順序簡潔美觀(前段時間我特意發了壹個帖子要求對若幹整數進行排序,其實目的是為了

展現STL的簡潔優雅)。壹旦我們習慣了用泛思維來考慮問題,我們就能充分體會到模板帶來的美好!

對於數值計算,c++標準庫完全可以滿足現代服務和商業計算對數據和信息的要求。

當響應請求時。

我認為學好壹門語言最重要的是練習。也就是說,多寫!“工程經驗的積累”對現有的意義重大

對於做了壹段時間開發的程序員來說很重要!只有通過不斷的積累,才能逐步實現C++

語言背後的東西。為此,沒有太多編寫程序代碼經驗的新手也可以使用

有效的C++先存點經驗值。有效的C++是壹本好書!。邁耶斯的書的絕對價值

不得不讀,Meyers可以說是當今c++界最優秀的技術專家之壹。

推薦網站:

www.royaloo.com

下面這段文字應該是去年塗鴉的,主要是關於動態內存分配的,這裏再看壹遍。

,覺得還是寫得太淺了。因為內存是程序運行的“遊樂場”,所以對站點的理解會比較直接。

影響我們節目的流暢性和穩定性。

C++提供操作符new在堆上分配內存,提供操作符delete釋放內存。在某些情況下,我

科學家需要更好地控制內存的分配和釋放。許多程序創建並釋放大量的重要類對。

像樹節點、鏈表、鏈接、點、線、消息等等。使用共同的記憶點。

用諸如new和delete這樣的適配器分配和釋放這些對象有時會支配程序的運行時間和內存需求。

有兩個因素:壹般內存分配操作的操作和空間的消耗,對象大小不同導致的內存碎片。

。在類中使用自定義內存分配器將加速模擬器、編譯器和類似程序的執行。

壹個例外是需要更好的內存控制的情況:它需要在有限的資源下長時間連續運行。

這個項目。實時系統往往需要以最小的代價獲得有保證的、可預測的內存。這也導致了更多

對良好記憶控制的需求。壹般來說,這些程序避免動態內存分配,使用特殊用途。

基於內存分配器管理有限的資源。

另外,在某些情況下,由於硬件或系統的要求,需要將對象放在指定的內存位置。這也是

需要自定義內存管理(通過重載new來實現)。

在c++ 2.0版中,為了滿足上述需求,內存管理機制也做了相應的修改。主要引用

分為操作員新增[]和操作員刪除[]。

操作員新功能的範圍。

操作員範圍(範圍)

*運營商新全球

class-name::operator新類

運算符new的第壹個參數必須是size_t類型(在STDDEF中定義的類型。h),它返回類型。

是void *。

當分配內置類型的對象時,不包含用戶定義的新運算符函數的類對象、任何

使用類型的數組時,請使用全局new運算符函數。當在類中自定義新運算符時。

內存,調用這個類的新運算符。如下所示:

#i包括

#i包括

類別空白

{

公共:

Blanks(){}

void *運算符new( size_t stAllocateBlock,char chInit);

};

void *Blanks::運算符new( size_t stAllocateBlock,char chInit)

{

void * PV temp = malloc(stAllocateBlock);

if( pvTemp!= 0 )

memset( pvTemp,chInit,stAllocateBlock);

返回pvTemp

}

int main()

{

Blanks *a5 =新的(0xa5)空格;//創建對象空白,並使其成為0xa5。

返回a5!= 0;

}

new運算符可以重載,但delete運算符不能重載。因為說到釋放,我們能得到的只有

這是壹個指針。而且,指針可能不是原來的對象類型指針(可能有類型轉換)。現實

事實上,當使用new獲取指向壹塊內存的指針時,在這塊內存前面有壹個指示器。

,記錄實際分配的內存量。調用delete,就可以知道需要釋放的內存大小。

解除數組分配:

void f()

{

X* p1 =新X[10];

// ...

刪除[]X;

}

為什麽不用delete[10]X;來釋放內存?比雅尼·斯特勞斯特魯普說,這種方法很容易導致錯誤。

錯了,把記錄任務中的元素數執行刪除。

至於C++沒有內置垃圾收集的原因,請看c++語言的設計。

規劃與進化(En)比雅尼·斯特勞斯特魯普機械工業出版社(俗稱D & amp;e)可以得到答案。

另外,c++標準庫提供了智能指針auto_ptr,可以幫助我們防止“被”

引發異常時發生資源泄漏。“但缺點是智能指針不能指向數組,因為它是內部釋放的。

保存是通過delete而不是delete []完成的。因此,它只能用於指向單個對象。

模板部分是C++中的難點部分,也是C++的魅力所在。下面的文字是我之前看到的,帶有

屍體的來源不清楚。今天稍微整理了壹下,作為模板介紹的壹個單元。

為什麽要使用模板?

對於除了類型之外都壹樣的函數(比如quicksort),我們壹般有三種解決方案。

1.針對每個不同的類型重復編寫函數實體(C語言的做法):

int* quicksort(int a[]) {...}

double* quicksort(雙a[]) {...}

2.使用Object(Java的做法)或void*

有兩個缺點。

效率也有問題。

類型檢查問題

3.使用宏預處理機制

缺點:只是愚蠢的文本替換,沒有考慮範圍和類型安全。

但是,模板的應用可以避免這些缺點,我們可以這樣寫:

模板

T* quicksort(T a[]) {...}

優勢:

代碼簡潔優雅,所有參數類型都用t代替,真正實現了類型獨立。

更好的類型安全性,所有類型檢查都是在編譯時完成的,避免了

使用指針。

沒有繼承,效率高。(1)沒有虛函數;(2)所有的工作都是

在編譯期內完成,大大提高了運行效率。

目的:告訴編譯器如何做出最佳選擇,以及這個選擇

這都是在編譯時完成的。

模板機制:特殊化和論元演繹

1,專業化

基本模板:

模板

A類{ // (1)

void f(T1 a,T2 b);

}

本地專業化(部分專業化):

模板類A { // (2)

void f(int a,T2 b);

}

或者

模板& gtA類{ // (3)

void f(T a,T b);

}

全球專業化(明確專業化):

模板& lt& gt

A級

void f(int a,int b);// (4)

}

使用示例:

a* p 1;//將使用(4)-全局專門化

a* p2;//將使用(3)-局部專門化

A * p3//將使用(2)-局部專門化

A * p4//將由(1)-基本模板生成。

//A

優勢:

By:全球專業化-& gt;地方專業化->;基本模板,這種專門化順序(重載解析規則)的選擇和匹配是由編譯器自動進行的,不需要人工參與。

可以根據不同的情況(比如不同的類型,不同的條件)給出不同的實現,從而獲得更靈活的針對性。

它可以針對任何變化,提高程序的可擴展性。

2真實論證演繹

t常數和。f(T const & amp;壹、T常數& ampb)

{

返回a+b;//1

}

int g = f(1,2);

其實f(1,2)要匹配的函數是int const &;f(int const & amp;,int const & amp);

而這個功能又是怎麽來的呢?

優勢:

裏面不需要提供壹對尖括號和自變量,比如f(1,2)。給您

用實參數推演,我們可以寫出f(1,2)。

模板的應用

1,標準庫(STL)-模板代碼無處不在。

標準庫=算法+容器+叠代器

如列表/

2.類型獨立性(T)

3.特質與政策

(1)trait:主要使用了很多typedef和specializations,指定了壹個特性。

// traits/accumtraits3.hpp

模板

lass AccumulationTraits

c模板& lt& gt

類別累積特征{

公共:

typedef int AccT

靜態賬戶常數零= 0;

};

模板& lt& gt

類別累積特征{

公共:

typedef int AccT

靜態賬戶常數零= 0;

};

模板& lt& gt

類別累積特征{

公共:

typedef長賬戶;

靜態賬戶常數零= 0;

};

(2)策略:通常表示為函數,它指定了壹種行為。

類別SumPolicy {

公共:

模板

靜態空隙累積(t 1 & amp;T2 const & amp;值){

總計+=值;

}

};

(3)特征和策略的用法:

模板& gt

類別累積

公共:

typedef typename特征::AccT AccT

靜態賬戶累計(T const* beg,T const* end) {

賬戶合計= Traits::zero();

而(求!= end) {

Policy::accumulate(合計,*求);

++ beg;

}

返回總數;

}

};

4、元編程

編譯時計算和遞歸的思想

5、設計模板的新形式

(後面會詳細介紹第三、第四、第五點)

C++模板中文版的具體介紹

1部分介紹模板的基本概念,以教程的風格介紹這些基本概念。

第二部分闡述了模板的語言細節,可以作為模板化施工的參考手冊。

第三部分介紹了C++模板支持的基本設計技術,涵蓋了從微小的概念到復雜的用法。有些技術是其他書上沒有出現過的。

在前兩部分的基礎上,第四部分深入討論了使用模板的各種常見應用程序。

  • 上一篇:2022高三老師個人年度工作總結5篇
  • 下一篇:培訓學校的招生方法有哪些?
  • copyright 2024編程學習大全網