指向對象的指標在建立對象的時候,變異系統會給每一個對象分配一定的儲存空間,以存放其成員。對象空間的起始地址就是對象的指標。可以定義一個指標變數,用來存放對象的指標。一個簡單的樣本1.1:複製代碼 代碼如下:#include<iostream>using namespace std;class Student{ public: int num; int score; Student(int ,int
常對象常對象必須在定義對象時就指定對象為常對象。常對象中的資料成員為常變數且必須要有初始值,如複製代碼 代碼如下:Time const t1(12,34,36); //定義t1為常對象這樣的話,在所有的場合中,對象t1中的所有資料成員的值都不能被修改。凡希望保證資料成員不被改變的對象,可以聲明為常對象。定義常對象的一般形式為類名 const 對象名(實參列表);也可以把const寫在最左面const &
指向對象的常指標將指向對象的指標變數聲明為const型,並使之初始化,這樣指標值始終保持為其初始值,不能改變。複製代碼 代碼如下:Time t1(10,12,15),t2;Time * const ptr1=&t1;ptr1=&t2;定義指向對象的常指標的一般形式為類名 * const
直接傳遞對象名用對象名做函數參數時,在函數調用時將建立一個新的對象,它是形參對象的拷貝。================下面給出一個直接傳遞對象名的例子程式1.1==================複製代碼 代碼如下:#include<iostream>using namespace std;class Time { public: Time(int,int,int);//建構函式 void Print();//輸出資訊函數 &
=============下面先給出一個new和delete基本應用的例子,回顧一下它的基本用法============複製代碼 代碼如下:#include<iostream>using namespace std;int main(){ int *p;//定義一個指向int型變數的指標p p=new int(3);//開闢一個存放整數的儲存空間,返回一個指向該儲存空間的的地址
對象的賦值如果對一個類定義了兩個或多個對象,則這些同類的對象之間可以互相賦值,或者說,一個對象的值可以賦給另一個同類的對象。這裡所指的對象的值是指對象中所有資料成員的值。對象之間的賦值也是通過賦值運算子“=”進行的。本來賦值運算子“=”只能用來對單個的變數賦值,現在被擴充為兩個同類對象之間的賦值,這是通過對賦值運算子的重載實現的。實際上這個過程是通過成員複製來實現的,即將一個對象的成員值一一複製給另外一個對象的成員。對象賦值的一般形式:對象名1=對象名2;注意,對象1和對象2必須是屬於同一個類=
定義我們知道函數的重載可以實現一個函數名多用,將功能相同或者類似函數用同一個名來定義。這樣可以簡化函數的調用形式,但是程式中,仍然需要分別定義每一個函數。C++提供的函數模板可以更加簡化這個過程。所謂函數模板實際上是建立一個通用函數,其涵涵素類型額形參類型不具體指定,用一個虛擬類型來代表,這個通用函數就稱為函數模板。凡是函數體相同的函數都可以用這個模板來代替,不必定義多個函數,只需要在模板中定義一次即可。在調用函數時,系統會根據實參的類型來取代模板中的虛擬類型,從而實現了不同函數的功能。定義函數
C++中的函數模板 對於類的聲明來說,也有同樣的問題。有時,有兩個或多個類,其功能是相同的,僅僅是資料類型不同,如下面語句聲明了一個類:複製代碼 代碼如下:class Compare_int{ public: Compare(int a,int b) { x=a; y=b; } int
(1)C++不允許使用者自己定義新的運算子,只能對已有的C++運算子進行重載。例如,有人覺得BASIC中用“* *”作為冪運算子很方便,也想在C++中將“* *”定義為冪運算子,用“3* *5”表示35,這是不行的。(2)C++允許重載的運算子C++中絕大部分運算子都是可以被重載的。不能重載的運算子只有5個:.
剛開始學習C++的類和對象的部分,對類中的常資料成員和待用資料成員的概念和用法經常混淆,所以今天整理一下,順便說一下,今天是我的生日,祝我生日快樂,呵呵。常資料成員常資料成員是指在類中定義的不能修改其值的一些資料成員,類似於我們以前學過的常變數,雖然是變數,也有自己的地址,但是一經賦初值,便不能再被修改。適用於類中定義一些初始化之後不希望被修改的變數。定義方法:複製代碼 代碼如下:const 類型名
使用方法:(1)在函式宣告或定義時,直接對參數賦值,該參數就是預設參數。(2)在函數調用時,省略部分或全部參數,這時就會使用預設參數進行代替。注意事項:(1)一般在聲明函數是設定預設參數。如果在函式宣告和定義函數時都設定了預設參數,則以函式宣告的預設參數為準。複製代碼 代碼如下:#include<iostream>using namespace std;int main(){ double add(double a=3.2,double
準備資料複製代碼 代碼如下:#define MAXLEN 100 //定義順序表的最大長度struct DATA{ char key[10]; //結點的關鍵字 char name[20]; int age;};struct SLType //定義順序表結構 { DATA ListData[MAXLEN+1];//儲存順序表的結構數組 int
準備資料準備在鏈表操作中需要用到的變數及資料結構範例程式碼如下:複製代碼 代碼如下:struct Data //資料結點類型 { string key; //關鍵字 string name; int age;};struct CLType //定義鏈表結構 { Data nodeData; Data
什麼是棧結構棧結構是從資料的運算來分類的,也就是說棧結構具有特殊的運算規則,即:後進先出。我們可以把棧理解成一個大倉庫,放在倉庫門口(棧頂)的貨物會優先被取出,然後再取出裡面的貨物。而從資料的邏輯結構來看,棧結構起始就是一種線性結構。如果從資料的儲存結構來進一步劃分,棧結構包括兩類:順序棧結構:即使用一組地址連續的記憶體單元依次儲存棧中的資料。在程式中,可以定義一個指定大小的結構數組來作為棧,序號為0的元素就是棧低,再定義一個變數top儲存棧頂的序號即可。鏈式棧結構:即使用鏈表的的形式儲存棧中各
什麼是隊列結構隊列結構是從資料運算來分類的,也就是說隊列結構具有特殊的運算規則。而從資料的邏輯結構來看,隊列結構其實就是一種線性結構。如果從資料的儲存結構來進一步劃分,隊列結構可以分成兩類。順序隊列結構:即使用一組地址連續的記憶體單元依次儲存隊列中的資料。在程式中,可以定義一個指定大小的結構數組來作為隊列。鏈式隊列結構:即使用鏈表形式儲存隊列中各元素的值。在隊列結構中允許對兩端進行操作,但是兩端的操作不同。在表的一端只能進行刪除操作,稱為隊頭;在表的另一端只能進行插入操作,稱為隊尾。如果隊列中沒
遞推演算法是非常常用的演算法思想,在數學計算等場合有著廣泛的應用。遞推演算法適合有明顯公式規律的場合。遞推演算法基本思想遞推演算法是一種理性思維莫斯的代表,根據已有的資料和關係,逐步推到而得到結果。遞推演算法的執行過程如下:(1)根據已知結果和關係,求解中間結果。(2)判斷是否達到要求,如果沒有達到,則繼續根據已知結果和關係求解中間結果。如果滿足要求,則表示尋找到一個正確答案。遞推演算法需要使用者知道答案和問題之間的邏輯關係。在許多數學問題中,都有明確的計算公式可以遵循,因此可以採用遞推演算法來
窮舉演算法(Exhaustive Attack
C語言/C++怎樣產生隨機數:這裡要用到的是rand()函數, srand()函數,和time()函數。需要說明的是,iostream標頭檔中就有srand函數的定義,不需要再額外引入stdlib.h;而使用time()函數需要引入ctime標頭檔。使用rand()函數擷取一個隨機數如果你只要產生隨機數而不需要定義範圍的話,你只要用rand()就可以了:rand()會返回一隨機數值, 範圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h, 其值為2147483647。例子1.1
一、extern的使用方法下面是《C語言程式設計》中的關於extern的解釋:在一個來源程式的所有源檔案中,一個外部變數只能在某個檔案中定義一次,而其他檔案可以通過extern聲明來訪問它(定義外部變數的源檔案中也可以包含對該外部變數的extern聲明)。外部變數的定義中必須指定數組的長度,但extern聲明不一定指定數組的長度。外部變數的初始化只能出現在其定義中。假設函數push與pop定義在一個檔案中,而變數val與sp在另一個檔案中定義本那個被初始化(通常不太可能這樣組織程式),則需要通過
利用輸入字串流:std::istringstream複製代碼 代碼如下:bool b;std::string s = "true";std::istringstream(s) >> std::boolalpha >> b;但當字串s為“1”時,上面的代碼無法正確轉換,此時應該用:複製代碼 代碼如下:bool b;std::string s = "1";istringstream(s) >>