C++之類和對象(二)

(八)對象的動態建立與釋放

1.new 和 delete的用法:

1)在C語言中是利用庫函數malloc和free來分配和撤銷內存空間的。C++提供了較簡便而功能較強的運算符new和delete來取代malloc和free函數。

注意點:new和delete是運算符,不是函數,因此執行效率高。

2) new運算符的例子:
new int;            //開闢一個存放整數的存儲空間,返回一個指向該存儲空間的地址(即指針)
new int(100);  //開闢一個存放整數的空間,並指定該整數的初值爲100,返回一個指向該存儲空間的地址
new char[10];  //開闢一個存放字符數組(包括10個元素)的空間,返回首元素的地址
new int[5][4];  //開闢一個存放二維整型數組(大小爲5*4)的空間,返回首元素的地址
float *p=new float (3.14159);  //開闢一個存放單精度數的空間,並指定該實數的初值爲//3.14159,將返回的該空間的地址賦給指針變量p

3)new和delete運算符使用的一般格式爲:


用new分配數組空間時不能指定初值。如果由於內存不足等原因而無法正常分配空間,則new會返回一個空指針NULL,用戶可以根據該指針的值判斷分配空間是否成功。


(九)靜態成員變量和靜態成員函數:

1 static修飾的成員變量屬於類,不屬於具體的某個對象,可以共享(相當於全局變量)

必須在類外初始化,例如 int(類型) student(類)::m_total(static變量) = 0(初始化值);

訪問形式:static成員變量可以被對象訪問,也可以被類來訪問,或可以被對象指針訪問

2 類的static函數只能訪問類的靜態變量,不能訪問普通成員變量(無this指針)

3 static函數和普通函數區別在於:普通函數有this指針,可訪問所有隊員

4 static只能在聲明函數時加,不能再定義時加(類中聲明,類外初始化)

訪問形式:同上


(十)面向對象模型:

1.C++中的class從面向對象理論出發,將變量(屬性)和函數(方法)集中定義在一起,用於描述現實世界中的類。

從計算機的角度,程序依然由數據段和代碼段構成。

2.C++類對象中的成員變量和成員函數是分開存儲的
成員變量:
普通成員變量:存儲於對象中,與struct變量有相同的內存佈局和字節對齊方式
靜態成員變量:存儲於全局數據區中
成員函數:存儲於代碼段中。

3總結:

1、C++類對象中的成員變量和成員函數是分開存儲的。C語言中的內存四區模型仍然有效
2、C++中類的普通成員函數都隱式包含一個指向當前對象的this指針。
3、靜態成員函數、成員變量屬於類
靜態成員函數與普通成員函數的區別:
靜態成員函數不包含指向具體對象的指針
普通成員函數包含一個指向具體對象的指針


(十一)const修飾成員函數

1.const的變量不能直接修改,但可以通過指針來改變變量的值

2.const只能在本文件中讀取,作用域是當前文件,extern可以接收外部文件數據,但不能在外部文件中,讀取const修飾的變量

3.const可修飾類,變量,函數

const成員函數(如:void show() const)可以使用類中所有成員,但不能被改變值

4.聲明和定義函數時都要加const.,一旦將對象定義爲常對象之後,就只能調用類的const成員


(十二)this指針

1.this是c++中的一個關鍵字,也是一個const指針,它指向當前對象,值不能被修改

2.通過它可以訪問當前對象的所有成員

3.在類的內部使用,可以訪問所有成員(public. private)

例如 this->name = name;

4.this只能在非靜態成員函數內部使用,在其他地方非法

5 this只能在對象創建以後才能使用,否則非法


(十三)友元函數和友元類

友元函數:

1友元函數的聲明與位置、public、private等都無關

2友元函數不是類的內部函數,是一個全局函數,但是可以改變類的私有屬性   友元函破壞了類的封裝性

3友元函數可以訪問當前類的private成員

4友元函數不能直接訪問類的成員,必須要藉助對象指針(或引用)


友元的關係是單向的,不是雙向的

友元類:

把一個類聲明另一個類的好朋友(單向的)

1友元關係不能傳遞,B是A的友元類,C是B的友元類,不等於C是A的友元類

2友元類的所有成員函數都可以訪問另一個類的私有成員



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章