1. 程式人生 > 其它 >掌握函式執行過程,作用域鏈

掌握函式執行過程,作用域鏈

類與物件

類用於指定物件的形式,它包含了資料表示法和用於處理資料的方法。類中的資料和方法稱為類的成員。函式在一個類中被稱為類

函式

範圍解析運算子

:: 在類的外部使用範圍解析運算子 :: 定義該函式

建構函式

隱式呼叫建構函式: complex A(1.1 , 2.2);

顯式的呼叫建構函式: complex A=complex(1.1 , 2.2);

無參建構函式呼叫形式:complex A;

建立物件陣列時

這個類必須有無參建構函式或形參皆有預設值

解構函式

釋放分配給物件的記憶體空間

當撤消物件時(物件生命週期結束時),系統會自動地呼叫解構函式。

而是在撤銷物件佔用的記憶體之前完成一些清理工作---釋放資源。

先構造的後析構,後構造的先析構

全域性物件:在主函式之前構造,主函式結束或呼叫exit(0)時,析構。

區域性自動物件:函式呼叫,建立物件時構造,函式結束時析構。多次呼叫函式,就多次構造和析構。

區域性靜態物件:程式第一次呼叫函式時構造,主函式結束或呼叫exit(0)時,析構。其間,呼叫函式不構造也不析構。

過載

class Time{
	//過載減號
	
    Time operator-()const{

    }//cconst成員函式不能修改呼叫該函式的物件
};

友元

類的主要特點之一是資料隱藏

由於過載之後的B*(double)

只能左邊是呼叫物件

用非成員函式(使用的所有值都是顯性引數

這個時候就可以使用友元函數了

1.建立

在類宣告的原型前面加上關鍵詞friend

不屬於成員函式,無法使用成員運算子來呼叫

但是與成員函式的訪問許可權是一致的

不需要 範圍解析運算子

2.友元: 過載<<運算子

cout 是一個 ostream 物件,能夠智慧識別c++的基本型別

void & operator<<(ostream &os,const Time & t){//採用引用而不是取值,普通型別用引用更快

}
//這種情況下只能 time << cout
//不符合
//可以用友元函式來實現
//這種情況不能用cout<<"7"<<time,而通常能用是因為它返回一個指向ostream的引用,(cout<<)本身就是一個ostream物件
void & operator<<(ostream &os,const Time & t){//採用引用而不是取值,普通型別用引用更快

    return os;
}

rand()函式

rand()會返回一個範圍在0到RAND_MAX(至少是32767)之間的偽隨機數(整數)。

int rand(void);

void srand (usigned int seed);

在呼叫rand()函式之前,可以使用srand()函式設定隨機數種子,如果沒有設定隨機數種子,rand()函式在呼叫時,自動設計隨機數種子為1。隨機種子相同,每次產生的隨機數也會相同。

srand()用來設定rand()產生隨機數時的隨機數種子。引數seed是整數,通常可以利用time(0)或getpid(0)的返回值作為seed。//Time(0)是得到當前時時間值(因為每時每刻時間是不一樣的了)。

使用rand()和srand()產生1-100以內的隨機整數:

三、使用rand()和srand()產生指定範圍內的隨機整數的方法

“模除+加法”的方法

因為,對於任意數,0<=rand()%(n-m+1)<=n-m

物件指標

物件空間的起始地址,稱為物件的指標

Time *pt;//定義pt為指向Time類物件的指標變數

This

  1. C++提供了一個特殊的物件指標——this指標。它指向類物件的首地址

  2. 成員函式通過這個指標可以知道自己當前屬於哪一個物件。

  3. this指標是一種隱含指標,它隱含於每個類的成員函式中。

this 指標是const 指標,即編譯器規定不允許在程式中修改它的值。

當形式引數與資料成員同名時,需要加this:

const

**返回型別成員函式名(形參)const **

只讀本類的資料成員而不能修改它們

只能用指向常物件的指標變數指向常物件。

指向常物件的指標變數即可指向常物件,也可指向非常物件。

不能通過該指標改變物件。該指標變數本身可以改變。

常用於函式形參,目的是保護形參指標所指向的物件,使它在函式執行過程中不被修改。

即只想在函式中引用該物件,而不想改變它。

靜態成員

靜態成員的特性:

不管這個類建立了多少個物件,靜態成員只有一個拷貝,這個拷貝被所有屬於這個類的物件共享。

不能在類中進行初始化,也不能通過建構函式初始化。因為在類中不給它分配記憶體空間。必須在類宣告之外使用單獨的語句初始化。一般在main() 開始之前、類的宣告之後的全域性地帶為它初始化。

格式:資料型別類名::靜態資料成員名=初值;

在類外定義時,不要用static字首。

靜態成員函式中沒有this指標,因為它不與特定的物件相聯絡

靜態成員函式訪問的基本上是靜態資料成員。最好不用靜態成員函式引用非靜態資料成員。

使用靜態成員函式的另一個原因是:可以用它在建立任何物件之前處理靜態資料成員,這是普通成員函式不能實現的功能。