C 析構函式,This指標,函式鏈

2021-07-04 00:16:20 字數 2026 閱讀 6265

#include

using namespace std;

class a

public:

a()par=new int[20];//開闢對空間

for(int i=0;i<20;i++)//初始化堆

par[i]=i;

cout<<"hello\n";

a(int a)

par=new int[20];

for(int i=0;i<20;i++)

par[i]=i;

cout<<"hellohellohello\n";

void printf()

for(int i=0;i<20;i++)

cout<~a()

if(par!=null)

delete par;

par=null;

cout<<"goodbye!\n";

private:

int* par;

int main(int argc, const char * argv)

a* a=new a;//呼叫預設建構函式開闢堆空間時,堆空間中盛放物件,編譯器會呼叫預設的建構函式對對空間中的物件進行初始化

a->printf();//效果和(*a).printf()的效果一樣的

delete a;//

a=null;

a* b=new a(3);//呼叫非預設建構函式

b->printf();

delete b;//釋放

b指向的堆空間,

delete

指向物件的指標,先呼叫析構函式對成員變數所指向的堆空間進行釋放,再把

b所指向的堆空間進行釋放

b=null;

return 0;

1.    

執行析構函式:先釋放堆中的空間,再釋放棧中的空間。

2.    

成員變數依附物件存在。

3.     引用即別名

class circle

private:

float x;

float y;

circle p;

circle q;

p=q;成員變數內容的逐一拷貝,淺拷貝(邏輯拷貝)

4.   

函式鏈前提前面要是乙個物件(類型別)。

5.     const物件只能呼叫const函式

6.     引用即別名節省記憶體空間

7.     this指標非靜態成員函式都有this指標,編譯器會自動呼叫

8.     (*this).和this-> 的作用效果是相同的

9.    

顯示使用

this

指標的情況:

1.形參和成員變數同名

2.要返回某個物件本身

例子:情況一,形參和成員變數同名

class a

public:

a(int a,int b)

(*this).a=a;

this->b=b;

private:

int a;

int b;

class circle

public:

circle(){}

circle & setradius(float r)

radius=r;

return *this;

private:

float radius;

float x_centre;

float y_cenmtre;

int main()

circle a(0,0,0,);

a.setradius(10);//其表示的就是物件

circle &setradius(float r)

this 表示返回的物件 this指向物件a,所以*this等價於物件a

C 析構函式 虛析構函式

1.為什麼要定義虛析構函式?如果有乙個帶有虛函式功能的類,則它需要乙個虛析構函式,原因如下 1 如果乙個類有虛函式功能,它經常作為乙個基類使用 2 如果它是乙個基類,它的派生類經常使用new來分配 3 如果乙個派生類物件使用new來分配,並且通過乙個指向它的基類的指標來控制,那麼它經常通過乙個指向它...

C 建構函式 析構函式 虛析構函式

一般地,建立物件和刪除物件時,父類建構函式 子類建構函式 子類析構函式 父類析構函式。特例 如果用new建立了乙個物件,並將父類的指標指向這個子類的物件,那麼用delete撤銷物件時,系統只執行基類的析構函式,而不執行派生類的析構函式。如果希望按照子類析構函式 父類析構函式的順序執行,那麼應該將基類...

析構函式 及 指標

第一層是系統認識的變數,比如int,int 這些變數系統會在生存週期結束後自動釋放的,當然,你也可以手動地將其釋放 第二層是指標指向的動態分配的空間,需要呼叫delete函式來釋放 類裡面定義的也無外乎這兩種 為何要寫析構函式?而且一般定義成 virtual 型別?你沒法去訪問類的priviate成...