下面這些是我這次通過學習C++的一些筆記和心得:
一、一些基本概念:
C++是在C語言的基礎上開發的一種面向對象編程語言。
? ? ? 說到C++,我們就會想到Object-based與Object-oriented。通過在網上查找以及自己的理解后,我覺得在論壇上看到的這句話說的很對:“Object-oriented支持Polymorphism,而Object-based不支持Polymorphism.主要的區別就在于此。支持多態的代價是額外的間接性--不論是在“內存的獲得”或是在“類型的決斷”上。”
? ? ? ?而classes之間的關系主要:繼承、復合、委托。
二、開發環境的搭建和選擇:
? ? ? ?學習C++,IDE是必不可少的,由于我自己之前有裝過eclipse,所以我最開始決定使用的是:eclipse+cdt+MinGW的方法。(安裝方法參考的是:Eclipse下配置CDT和MinGW終極方法)。
? ? ? ?可是后來還是覺得有些不太好用,而且會影響eclipse的速度(可能是我還沒有配置好,但是時間有限),所以我最后還是選擇了眾所周知Microsoft Visio Studio。
三、代碼中的一些思考:
? (一)安裝好后,第一件事兒當然就是寫一個helloworld,并對vs的環境進行熟悉。并發現了一個問題了:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf("Hello World!\n"); ? ?與 ? ??std::cout<<"Hello World!"<< std::endl; ?是不同的。因為:
? ? ? ?任何一門程序設計語言,基本主要分為兩大類:核心的語言環境 + 常用的數據結構和算法(庫)。
? ? ? ?而C++標準庫里是包含了C標準庫的。
? ? ? ?C標準函數庫中 printf 的函數定義: int __cdecl printf(_In_z_ _Printf_format_string_ const char * _Format, ...); (面向過程)
? ? ? ?C++標準庫中的 cout 對象定義: extern ostream cout; (面向對象)
? (二)在寫程序過程中,我想到了之前有提到過得inline內聯函數,覺得有些模糊。后來,經過上網查找(參考了C++ inline 函數),發現使用內聯還是要謹慎:
? ? ? ? 內聯能提高函數的執行效率,為什么不把所有的函數都定義成內聯函數?如果所有的函數都是內聯函數,還用得著“內聯”這個關鍵字嗎?內聯是以代碼膨脹(復制)為代價,僅僅省去了函數調用的開銷,從而提高函數的執行效率。如果執行函數體內代碼的時間,相比于函數調用的開銷較大,那么效率的收獲會很少。另一方面,每一處內聯函數的調用都要復制代碼,將使程序的總代碼量增大,消耗更多的內存空間。
? ? ? ? ?以下一些情況不適宜使用內聯:
? ? ? ? ? ? ? 1、如果函數體內的代碼比較長,使用內聯將導致內存消耗代價較高。
? ? ? ? ? ? ? 2、如果函數體內出現循環,那么執行函數體內代碼的時間要比函數調用的開銷大。類的構造函數和析構函數容易讓人誤解成使用內聯更有效。要當心構造函數和析構函數可能會隱藏一些行為,如“偷偷地”執行了基類或成員對象的構造函數和析構函數。所以不要隨便地將構造函數和析構函數的定義體放在類聲明中。一個好的編譯器將會根據函數的定義體,自動地取消不值得的內聯(這進一步說明了 inline 不應該出現在函數的聲明中)。