第一篇:讀書筆記_C++
第三章:初步了解函數
1.一個簡單的函數
函數又叫方法,是一個功能代碼塊,函數名前的類型表示該函數執(zhí)行后的返回值類型。函數名后的括號內是表示調用者傳入的參數,括號后面的大括號是函數體部份。函數名可以作為函數的指針傳遞。跟數組的數組名用法一樣。
2.函數的傳參
3.函數的返回值、參數與變量
4.函數的聲明和定義
函數在被調用前必須申明,如果函數的定義在調用前,則可以不用申明。不過在大型程序中不確定其復雜的調用順序,最好申明和調用分開。
5.局部變量
局部變量是指在函數中聲明的變量,它的生命周期僅限于本函數大括號內。在內在中,局部變量存放于棧中。
6.全局變量
在任一函數的外部定義的變量叫作全局變量,它的生命周期是程序的生命周期。
第四章:C++的數據類型
1.變量的定義
變量相對于常量而言,就是可以改變值的量。它具有一個名字,一個值,值可以被改變。
2.將變量及數據存儲在內在中
計算機的內存是一系列小格子型的存儲空間,在我們定義變量時,計算機會根據變量的類型在內存中開僻相應的空間大小,如CHAR型占一個單元,INT型占4個單元。在未被變量賦值前,變量的值是隨機的。
3.布爾型變量
布爾型變量只有兩種值,1和0.通常非0的值,和1是等同的。0就是假,非0就是真。
4.字符型變量
字符型變量占一個字節(jié),一個字節(jié)就是8位,2^8=256,一個字節(jié)可以表示256種字符。ASCII碼。其中常用的a=97,A=65,1=48這三個是要記住的。字母的大小寫相差32是判斷第五位是1還是0.即2^5
5.wchar_t雙字節(jié)型變量
雙字節(jié)就是兩個字節(jié),兩個字節(jié)就等于一個字。它所表示的種類達到2^16,即65535種,可以表示地球上任何語言的符號了。
第二篇:高質量編寫c c++ 讀書筆記
質量屬性:正確性、健壯性、可靠性、效率、易用性、可讀性(可理解性)、可擴展性、可復用性、兼容性、可移植
頭文件:ifndef/define/endif
頭文件的作用:
*通過頭文件來調用庫功能。在很多場合,源代碼不便(或不準)向用戶公布,只要向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調用庫功能,而不必關心接口怎么實現(xiàn)的。編譯器會從庫中提取相應的代碼。
*頭文件能加強類型安全檢查。如果某個接口被實現(xiàn)或被使用時,其方式與頭文件中的聲明不一致,編譯器就會指出錯誤,這一簡單的規(guī)則能大大減輕程序員調試、改錯的負擔。
如果一個軟件的頭文件數目比較多(如超過十個),通常應將頭文件和 定義文件分別保存于不同的目錄,以便于維護。
程序的板式:
程序的版式追求清晰、美觀
在每個類聲明之后、每個函數定義結束之后都要加空行。
一行代碼只做一件事情,如只定義一個變量,或只寫一條語句。這樣的代碼容易閱讀,并且方便于寫注釋。
長表達式要在低優(yōu)先級操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮進,使排版整齊,語句可讀。
命名規(guī)則:
*標識符最好采用英文單詞或其組合,便于記憶和閱讀。切忌使用漢語拼音來命名。
*命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風格保持一致。
*程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標識符。
*變量的名字應當使用“名詞”或者“形容詞+名詞”。
*全局函數的名字應當使用“動詞”或者“動詞+名詞”(動賓詞組)。類的成員函數應當只使用“動詞”,被省略掉的名詞就是對象本身。
類名和函數名用大寫字母開頭的單詞組合而成。
變量和參數用小寫字母開頭的單詞組合而成。
常量全用大寫的字母,用下劃線分割單詞。
靜態(tài)變量加前綴 s_。
如果不得已需要全局變量,則使全局變量加前綴 g_(表示 global)。
類的數據成員加前綴 m_(表示 member),這樣可以避免數據成員與成員函數的參數同名。
為了防止某一軟件庫中的一些標識符和其它軟件庫中的沖突,可以為各種標識符加上能反映軟件性質的前綴。例如三維圖形標準 OpenGL 的所有庫函數 均以 gl 開頭,所有常量(或宏定義)均以 GL 開頭。
常量:
在 C++ 程序中只使用 const 常量而不使用宏常量,即 const 常量完全取代宏常量。
需要對外公開的常量放在頭文件中,不需要對外公開的常量放在定義文件的頭部。
建立在整個類中都恒定的常量應該用類中的枚舉常量來實現(xiàn)。(只能是整數)
函數設計:
值傳遞(pass by value)
指針傳遞(pass by pointer)
引用傳遞(pass by reference)
目的參數放在前面,源參數放在后面。
如: char *strcpy(char *strDestination, const char *strSource);
第三篇:Java從入門到精通讀書筆記—c++程序員學java
Java從入門到精通讀書筆記—c++程序員學java
第一章:
2分鐘看完,老生常談,即使沒怎么用過java也知道這些。
第二章:
1.instanceof應該是c++中沒有的,c++使用RTTI解決這個問題的,很難用。
2.super這種引用父類的方法也是比較簡單的,C++中是用父類名::父類方法()解決的,有點難看。
3.自動類型轉換和C++一樣,精度變高的隨便轉,精度變低的會丟失。
4.強制類型轉換只有(type)這一種,不像c++有static_cast、dynamic_cast、reinterpret_cast、和const_cast。
5.運算符什么的和c++幾乎一模一樣。
半小時看完。
第三章:
1.break可以跳出語句塊,c++中沒有語句塊。語句塊的定義就是在一段語句前加上花括號和冒號;
其他基本上和c++一樣,5分鐘看完。
第四章:
1.java數組越界會在運行時拋異常,c++不會,聲明數組的方法也有些不一致。
java 聲明數組的所有辦法
int[] a = new int[4];
int a[] = new int[4];
int[] a = {1, 15, 26};
int a[] = {1, 15, 26};
2.java的數組是一個對象,自帶length屬性,使用簡單。c++的數組不自帶方法和屬性,要知道數組長度只能sizeof(arrayObject)/sizeof(int)。當然如果使用STL中的vector之類的也和java一樣簡單。
3.java的所謂數組賦值(或者叫數組拷貝)其實就是c++中的兩個數組指針的賦值,java沒有指針,所以作者費了一大堆口水。好在java有垃圾回收,要不然一個指針的內存就算泄露了。至于真正的數組內容賦值,是使用System.arraycopy(ir, srcPos, ir, destPos, length);而C++一般使用memcpy等函數。若使用STL中的vector,那么就看vector的拷貝構造函數怎么寫的,應該是vector的對象賦值過去而不是指針指過去。
4.重溫了冒泡排序(時間復雜度O(n2)),和快速排序(最壞情況的時間復雜度為O(n2),最好情況時間復雜度為O(nlog2n))。
5.For-Each語法被引入java了,在很多地方用起來真是簡單。Python和c#早就支持了,c++中雖然STL的algorithm包中引入了for_each,但是由于需要使用函數指針還是略顯繁瑣。
這章挺多,看了一個多小時啊!
第五章:類和對象
1.Java中方法的重載和c++的一樣,都是通過參數的不同來區(qū)別。但是c++中可以設置默認參數,而java不可以。
2.java中的對象大部分只能new出來,或者clone出來,或者反射出來,而不能直接在棧上定義出來。而c++的對象在棧上和堆上創(chuàng)建的都很多。
3.基本類型的參數傳遞,java和c++都是傳值。對象的參數傳遞,java是傳引用,c++是拷貝,也就是傳值。其實c++中大部分時候也是傳引用或者傳指針,但java沒有指針,也沒有選擇耗時耗空間的拷貝,只能傳引用了。
這章對于c++程序員來說太簡單,幾分鐘過一遍就可以了。
第六章:繼承
1.方法被覆寫后,如果要調用父類的方法,c++必須用父類名::方法名,而java用super.方法名即可。
2.多態(tài)和動態(tài)綁定,java和c++幾乎一樣,都很簡單。
3.final關鍵字:java中的final關鍵字可以將一個類限制為無法繼承的,同樣的還有C#中的sealed關鍵字。而c++是沒有這個玩意的。
4.java的抽象類和c++幾乎一樣。
5.java是獨根語言,引入了Object類,它的clone方法就好像c++中的拷貝構造函數,它的equals方法是用來比較內容的,而toString方法是將對象作為字符串輸出的。
這章對于c++程序員來說同樣簡單,幾分鐘過一遍就可以了。
第七章:接口
1.java中有接口。C++沒有,唯一類似的是含有純虛函數的虛類(沒有純虛基類這個說法)。但是COM、CORBA等中間件中都有IDL語言(接口定義語言),使用這些中間件的c++程序員也沒有少寫接口。
2.接口實現(xiàn)的一些規(guī)定:
1)如果實現(xiàn)接口的不是抽象類,則必須實現(xiàn)其接口的所有方法才能被實例化;
2)接口中所有的方法默認為public;
3.接口可以用來實現(xiàn)多態(tài);
4.java的內部類和c++差不多,都沒人關心,最多懶得想名字的時候用用那個匿名內部類(例如什么UI的響應函數)。
5.java的對象克隆,吹了一堆就是個c++中的拷貝構造函數。所謂什么“淺克隆、深克隆”問題,就是c++中拷貝構造是遇上類中定義了指針的問題。C++程序員一望即知。
接口是為了維護單繼承機制弄出來的,花半小時看看還是值得的。
第八章:面向對象編程
C++程序員不用看。
第九章:異常處理
1.java的異常處理中有finally語句塊,而c++中沒有,所以程序員要自己想辦法來處理異常發(fā)生后諸如“資源釋放”之類的問題;
第十章:線程
1.java語言自帶線程機制,c++目前還是不帶線程機制的。雖然boost::thread庫也被眾多c++程序員廣泛使用。但是windows下用得最多的還是windows SDK自帶的線程函數;而linux下用得最多的還是pthread。另外還有一些號稱同時支持多個平臺的多線程庫。
2.java多線程有兩種方法實現(xiàn),第一是派生Thread類,第二種是實現(xiàn)Runnable接口。
3.java線程分為4種狀態(tài):new、runnable、non runnable和done,這和其他線程庫大同小異;
4.run、start、stop、sleep、suspend、resume、yield、wait、notify和notifyall等方法的含義也和其他線程庫一致。但suspend、resume和stop等方法是不建議使用的,因為可能會導致死鎖。
5.java可使用join方法來等待線程結束,而在某些線程庫中join方法經常是不可用的。
6.java的互斥使用synchonized關鍵字實現(xiàn),它很類似于boost.thread中的lock(mutex),只不過它是對線程對象隱含的鎖加鎖。其實這很不利于新手理解。另外還介紹了synchonized的一些亂七八糟的用法,相信對于新手這只有反作用。
這一章對于線程,介紹得比較淺顯,實現(xiàn)簡單的多線程應該沒問題,但是稍微復雜一點的也許就需要其他的開發(fā)包了。Java線程連個Mutex類都沒有,這是最讓我吃驚的,僅僅使用synchonized來實現(xiàn)同步、互斥、信號量該多麻煩啊,也許是我還沒弄懂java多線程吧。
第十一章:圖形編程
1.IDE的年代,GUI還是畫出來吧。Java中也就Layout類需要看看,其他大部分Layout類也是湊數的,根本不會有人用。
第十二章:事件處理
隨便看看了解即可,新手可以試著寫寫代碼,老手直接IDE中添加事件即可。
第十三章:Swing用戶界面設計
同第十一章,隨便看看即可。界面一般有專人搞,普通程序員能看懂就行了。
總結:《java從入門到精通》這本書整體質量尚可,c++熟手大概一到兩天可以看完,掌握程度在80%左右??赐旰竽軌蛴幸恍┗靖拍睿梢詫懸恍┗境绦???赐旰箅x入門還早,更談不上精通了。
說說我看完后的兩個迷惑之處吧,第一是從來沒有提到java中的對象、常量、代碼所在的堆、棧等內存分布情況,對于c++程序員來說是很難適應的,可能是篇幅的原因吧;第二沒有介紹垃圾回收機制,這可能是c++程序員更感興趣的吧。
第四篇:C++常用填空題
一、單項選擇題(共20題,每題1分,共20分)
6、對重載函數形參的描述中,錯誤的是 D
A.參數的個數可能不同
B.參數的類型可能不同
C.參數的順序可能不同
D.參數的個數、類型、順序都相同,只是函數的返回值類型不同
9、通常的拷貝構造函數的參數是
A. 某個對象名 B.某個對象成員名
C. 某個對象的引用 D.某個對象的指針名
10、關于構造函數特點的描述中,錯誤的是
A.定義構造函數必須指出類型
B.構造函數的名字與該類的類名相同
C.一個類中可定義0至多個構造函數
D.構造函數是一種成員函數
12、關于常成員的描述中,錯誤的是
A.常成員包含常數據成員和常成員函數兩種
B.常數據成員必須是公有的C.常數據成員要使用構造函數成員初始化列表進行初始化
D.常對象只能調用它的常成員函數,不能調用其它的成員函數
13、關于友元函數的描述中,錯誤的是
A.友元函數不是成員函數
B.友元函數只能訪問類中私有成員
C.友元函數破壞隱藏性,盡量少用
D.友元函數說明在類體內,使用關鍵字friend18、能夠釋放對象所占資源的是(析構函數)
二、填空題(共9題16空,每空1分,共16分)
1、函數重載時,編譯系統(tǒng)會根據_形參的類型或形參的個數 來區(qū)分。
3、若希望用一個已有對象來構造另一個同類型的對象,可以使用拷貝構造函數來實現(xiàn)。
4、靜態(tài)成員屬于類,而不屬于任何一個對象,它被同一個類的所有對象共享。
5、類的繼承方式有私有 繼承、公有 繼承和保護繼承。
6、重載運算符的含義必須清楚,不能有二義性。
7、按照聯(lián)編進行階段的不同,聯(lián)編方法可分為兩種: 動態(tài)聯(lián)編 和靜態(tài)聯(lián)編。
8、當基類中的某個成員函數被聲明為虛函數后,此虛函數就可以在一個或多個派生類中被重新定義,在派生類中重新定義時,其函數原型,包括返回類型、參數名、函數個數、參數類型以及參數的順序都必須與基類中的原型完全相同。
1.在類中必須聲明成員函數的原型,成員函數的實現(xiàn)部分可以寫在類外。
2.如果需要在被調函數運行期間,改變主調函數中實參變量的值,則函數的形參應該是引用類型或指針類型。
3.抽象類只能作為基類使用,而不能聲明它的對象。
4.進行函數重載時,被重載的同名函數如果都沒有用const修飾,則它們的形參個數或類型必須不同。
5.通過一個常對象只能調用它的常成員函數,不能調用其他成員函數。
6.函數的遞歸調用是指函數直接或間接地調用自身。
7.拷貝構造函數的形參必須是本類對象的引用。
第五篇:C++ 心得
2010.10.13
今天在學習用windows自帶的dos命令提示符窗口的命令:
列文件名dir,創(chuàng)建文件夾md(其他文件不能通過該命令創(chuàng)建,即使用了該類文件的后綴名,也只是將該名稱和后綴名一塊作為了一個新建文件夾的名字,例如md aa.txt的作用是建立一個名為aa.txt的文件夾),刪除文件夾下的所有文件del(但是不包括該文件夾下的子文件夾。網上還有人說用deltree可以刪除目錄樹,但是我試了不管用),刪除文件夾rmdir或者rd(必須是空的,不能含文件或者文件夾),重命名文件或者文件夾ren x y(將x改名為y,如果是文件則應包括后綴名,如果是文件夾只是名字就可以),移動文件或者文件夾(沒找到),復制文件copy a b(a和b可以是文件夾,這時候會復制a中的所有文件但不包括子文件夾到b中,遇到同名文件會詢問是否覆蓋;如果a和b是文件,則要包括后綴名,而且不只是相同后綴的可以復制,例如兩個txt文件,而且非同后綴的文件也可以,例如txt復制到doc文件或者rar文件,這種復制后會連txt的屬性一起復制給doc或rar,包括大小和占用空間這兩個屬性,doc的話還是可以打開,但是rar會損壞掉),創(chuàng)建文本文件copy con A.txt(或者用edit A.txt,區(qū)別是前一個會在輸完命令后讓你再輸入文本內容,輸完用ctrl+z結束,而后一個會跳出一個類似turbo-c的界面讓你輸入文字再保存),以樹形結構顯示出目錄tree(用參數-f 將列出第個文件夾中文件名稱)。
然后我想解壓一個再f盤的壓縮文件B,發(fā)現(xiàn)在ms-dos里進入B的目錄后,直接輸入
B.rar或者B.rar /x都會直接打開B,和雙擊B的效果相同(之前裝.NET 3.5 Framework的時候用過這個命令dotnetfx35.exe /x來解壓,我想用類似命令解壓B的,結果證明不行,上面這個命令應該是只針對.EXE文件有效果,而且不是普通的EXE文件,應該是壓縮類的exe文件)。但是我在實驗exe文件的時候發(fā)現(xiàn)一個有用的辦法。平時在有些文件夾里會有一些exe文件,雙擊之后有些可以運行,但是dos窗口一閃之后就沒有了,看不到內容,但是先打開ms-dos,再進入該exe文件目錄后輸入名稱回車則會看到運行內容,并且ms-dos窗口不會關閉。這可以用到C++編程之中。C++編程中,程序運行后有時候也會出現(xiàn)上面的情況,dos窗口一閃而過,看不到運行結果,以前都是直接在程序末尾加入system(”pause”)命令,現(xiàn)在也可以先將程序編譯并生成exe文件,再打開MS-DOS,進入exe文件所在文件夾,輸入該exe名稱的方法來運行,這時候一定可以看到結果。