#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成...