c++物件導向程式設計 部落格1
下面是這一段時間學過的知識以及我的個人感悟。
首先是constexpr型別。宣告constexpr的資料物件一定是乙個常量,而且必須用常量表示式初始化。若constexpr的物件是乙個函式,則它的型別應為constexpr函式。const的物件是常量,如果物件是常量表示式,則是constexpr型別。 auto型別說明符。用它來宣告變數的型別,由編譯器自動去分析並推斷出其型別。定義auto一定要有初始值。 decltype型別說明符。作用是選擇並返回運算元的型別。編譯器會自動分析表示式的型別,並不會真正計算表示式的值,例如const int a=0; decltype(a) x=1;//x的型別是const int。
typedef關鍵字的應用。typedef int a;//a就相當於int,"a s=1;"就是"int s=1;" typedef int *p;//定義了乙個名為p的指標 typedef int a;//定義了乙個名為a的陣列
範圍for(range-for)語句。它可以對容器或序列裡的所有元素逐個進行某種操作。語法形式為for(declaration:expression) statement;//declaration定義乙個變數,最常用的方法是使用auto型別說明符;expression必須是乙個序列。 例 int a=; for(auto e;a) e=e*2;//作用是將陣列a的元素逐個乘以2。
指標。指標語法為 型別 *變數; int x=1; int *p=&x; &是取位址運算子,*是指標解引用運算子。p是x的指標,存放x的位址,指標不能指向不同型別的物件,不能被賦值,也不能被初始化為不同型別的位址值。指標可以進行自加自減運算。void*指標可以持有任何型別的位址值,只能表明相關的值是個位址,但該位址儲存的物件型別不知道,不允許void指標到其他型別指標的直接賦值。
new和delete。c++語言通過new和delete兩個運算子來進行動態儲存空間的管理。new在動態記憶體中為物件分配空間,建立物件,並返回物件的位址。new 型別或new 型別(初始值). int *p1=new int; *p1=100; int *p2=new int(100);//在堆上分配乙個int物件,初始化並返回位址,這個物件只能通過指標間接操作。 new 型別[陣列大小] int *p=new int[100]; 堆上的空間使用後必須釋放,否則會造成記憶體洩露,用delete運算子釋放。 int *p=new int; *ip=521; delete ip; 釋放後不能再使用ip指向的記憶體。
引用。左值引用,型別 &引用變數=初始值;引用必須被初始化,且初始值須是乙個有記憶體位址的物件,不能在繫結到其他的物件。 右值引用, 型別 &&右值引用變數=右值表示式; 右值引用也必須被初始化,且右值引用引用的物件將要被銷毀。
const限定指標和引用。不能將const位址賦值給非const指標,允許將乙個非const位址賦值給const指標,const跟著誰就限定誰。 const引用可以繫結到非const物件,也可以用任意表示式初始化const引用,只要表示式的結果能轉換為引用的型別。 當乙個物件的值可能在編譯器的控制或檢測之外被改變時,應該將物件宣告為volatile,例如乙個被系統時鐘更新的物件,volatile的語法和const相同。
結構體。結構體能把一組不同型別的資料組合在一起,構成乙個復合型別,其中每個資料都是結構體的成員。 struct 結構體型別名; 例如 struct scoresheet; scoresheet s; s.name="某某某"; s.xuehao=111; ..... 使用結構體可以解決很多問題,例如要統計班級成績單,就可以使用結構體。
聯合。使用乙個變數來處理不同的資料型別時可以用聯合,用關鍵字union定義,語法和struct相似,union的每次只能使用乙個成員。
列舉。列舉型別定義了一組命名的整型常量,可以提高**的可讀性,用關鍵字enum定義。 enum shapetype; 為指定值的成員會賦給它相鄰的下乙個整數值,a=21。 不能使用列舉成員進行迭代,不能自增自減。
陣列。陣列在上學期已經學過。size_t是一種無符號型別,用來表示記憶體中任意物件的大小。 還可以用指標來訪問陣列元素。
begin()函式返回指向陣列第乙個元素的指標,end()函式返回指向陣列最後乙個元素的下乙個位置的指標。
標準庫型別string。表示可變長度的字串行,使用時應包括標頭檔案。size()可以返回string物件的長度,empty()判斷是否為空,string的加法運算至少有乙個運算物件是string。
標準庫型別vector。vector是長度可變的向量,使用時加標頭檔案。用push_back(x)可以向vector的末尾插入元素,pop_back()可以刪除vector的末尾。使用vector可以解決一些不確定數量的問題,v.size()返回元素個數。與陣列相比,vector和string都很靈活。
迭代器。vector::iterator it;//it能讀寫vector的內容,vectorv; auto it1=v.begin();。迭代器類似於指標型別,在容器或string型別上使用,指向物件是容器的元素或string中的字元。*iter返回迭代器所指元素的引用,iter->mem可以獲取該元素的成員,使用起來非常方便。
檔案資料處理。使用檔案流要有標頭檔案,使用字串流要有標頭檔案, 運用檔案流可以實現對檔案的讀寫操作,ifstream類用來輸入(讀檔案),ofstream用來輸出(寫檔案);ifstream in("檔名.txt");是定義檔案和開啟檔案;in從檔案中讀取資料,完成讀取後要關閉檔案,用in.close();ofstream out("檔名.txt");可以寫檔案,完成後也需用out.close()關閉檔案。使用字串流可以更方便的儲存資料。
函式。 語法形式為 返回型別 函式名(引數列表),函式是由使用者定義的操作,函式的結果是返回值,型別稱為函式返回型別,如果函式不返回任何結果,應將返回型別宣告為void。函式名後的引數是形參,函式體裡的引數是實參,函式在遇到return語句後結束。引數傳遞有傳值和傳引用兩種,按值傳遞即實參值初始化形參,形參的改變不能影響實參的值,所以若要修改實參的值可以將形參宣告為指標或引用。可以將函式宣告為返回指標或引用,此時返回物件本身,返回引用時,修改返回值會改變實際返回的物件,可以用const宣告返回值避免這種情況。過載函式的名字相同,功能相似,但引數個數或型別不同,實參會呼叫最佳函式。非指標和引用上的conat限定詞不能區分過載函式,const限定指標或引用時可以區分。 生存期是指程式執行過程中物件存在的時間,與作用域和儲存類別密切相關。全域性物件定義的變數和函式在整個程式中存在,區域性物件的作用域從其宣告點開始,到函式結束為止,例如for,while語句。可以將區域性物件宣告為static,是靜態儲存,在第一次定義時進行初始化,生存期會延續到程式結束。 register關鍵字宣告在函式中頻繁使用的自動變數,例如迴圈控制變數。 檔案作用域 static可以加在函式定義前,使這個函式只能在本檔案裡的其他函式呼叫,稱為靜態函式。extern宣告全域性物件。 namespace作用域,namespace關鍵字用來命名定義空間,使用者宣告的每個namespace都是乙個作用域, using 宣告可以將namespace中的名字引入特定作用域。 using std::cout; using namespace std; 可以出現在全域性作用域、namespace或區域性作用域中 引入的名字從using宣告開始到其所在作用域結束都可見。 c++程式物件的儲存類別有靜態儲存,自動儲存和動態儲存。靜態分配是指在全域性靜態儲存區為變數分配記憶體空間,自動分配指在程式的執行棧儲存區中為變數臨時分配記憶體空間,動態分配是指利用被稱為堆(heap)的記憶體塊為變數分配記憶體空間 (new,delete)。
類和物件 抽象資料型別adt,常見定義方式是採用結構體加全域性函式。結構體描述資料,全域性函式描述對這些資料的操作。資料成員與成員函式,結構體內的函式稱為成員函式,資料稱為資料成員,這樣的結構體被稱為類。
感悟 c++這門課明顯要比上學期難很多,裡面有很多新的概念,且比較難理解,所以應該多花時間去理解這些知識點,並且應該注重課後的複習和預習,穩固學過的知識。
C 物件導向程式設計(1)
1.類的修飾符 new 新建類,表示隱藏由基類中繼承而來的,與基類中同名的成員 public 公有,外界不受限制訪問 protected 保護類,該類及其子類可以訪問 internal 內部類,本程式的類可以訪問 private 私有類,只有該類可以訪問abstract 抽象類,抽象類是不完整的類,...
物件導向程式設計1
包 用於組織和管理類的目錄結構,同乙個包中不同出現同名類 包名 識別符號.識別符號.識別符號.package 打包命令,指明該類所在的包,該命令必須為 的第一行,同時必須與目錄結構相同 若在乙個包中需要使用其他包中的類,需要匯入包 import 包名.類名 使用包的原則 1.同乙個包中往往包含功能相...
物件導向程式設計(1)
什麼叫做面向過程程式設計?通俗的來說,這種程式設計風格如同從上到下,從左到右。首先,要考慮遵循的步驟,然後考慮如何表現這些資料。那麼什麼又是物件導向程式設計呢?從使用者的角度出發考慮物件,描述物件所需的資料以及描述使用者與資料進行互動所需要的操作。完成對介面的描述後,需要確定如何實現介面和資料儲存。...