關於虛函數,構造函數,非構造函數之間的交叉調用

首先,上代碼(仍是代碼引起的血案)ide

class A
{
public:
	A(){
		this;
		print();
	}
	virtual void print(){
		this;
		cout<<"A"<<endl;
	}
	void think(){
		this;
		print();
	}
	virtual ~A(){}

private:

};
class  B:public A
{
public:
	B(int temp):A(),x(temp)
{


}
	virtual void print() override
	{
		this;
		cout<<"B"<<endl;
	}
	virtual ~ B(){}

private:
	int x;

};

  

B b(3);
b.think();函數

 

輸出的結果:this

A指針

B對象

爲何會出現這種狀況呢?blog

 

由於子類並不繼承父類的構造函數和析構函數!!!繼承

相反會繼承成員函數和虛函數,作用域

在執行子類的構造函數時,會調用父類的構造函數,記住,是調用,也就是A::A(),這樣一來,是進入了A類的做用域,this指針也就是A類對象的this指針class

而執行成員函數時,由於繼承的關係,因此一直處於子類的做用域,構造函數

 

記住,只要是子類繼承父類,除了構造函數和析構函數以外,根本不存在父類的做用域,this指針所有都是子類對象的指針!!!!

相關文章
相關標籤/搜索