類的構造函數的調用

假如定義了一個類C:

 

class C{
public:
    C(){}
    C(int k){key=k;}
    ~C(){}
private:
    int key;
}
    

現在聲明類C的對象c1,c2,c3。

class C{
public:
	C(){key=0;}
	C(int k){key=k;}
	~C(){}
	void func(){cout<<"ok:"<<key<<endl;}
private:
	int key;
};

void main(){
	C c1;
	c1.func();//1.ok

	C *pc11=new C;
	pc11->func();//2.ok

	//C c2();
	//c2.func();//3.error

	C *pc12=new C();
	pc12->func();//4.ok

	C c3(2);
	c3.func();//5.ok

	C *pc2=new C(2);
	pc2->func();/6./ok

	delete pc11;
	delete pc12;
	delete pc2;
}

其中:第3種情況錯誤,編譯器以爲C c2()是在聲明一個函數,所以在後面一條語句c2.func()處出錯。


------構造函數和析構函數:

1.構造函數和析構函數均可以定義爲inline函數,但儘量避免定義構造函數和析構函數爲inline函數;

2.析構函數可以定義爲virtual虛函數,但是構造函數不可以定義爲虛函數,因爲虛函數的實現機制是虛調用,在信息不完整的情況下完成對函數的調用,特別是在已知接口而不知道準確對象類型的函數,而構造函數實現對對象的構造,需要已知對象的類型;

3.構造函數和析構函數都不可以定義爲靜態static成員函數;此外,static成員函數不能聲明爲virtual或const類型。

發佈了25 篇原創文章 · 獲贊 1 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章