溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

dynamic_cast和static_cast的異同

發布時間:2020-07-07 22:16:34 來源:網絡 閱讀:3179 作者:Chinayu2014 欄目:編程語言

dynamic_cast和static_cast是C++中的運行時類型轉換運算符,代碼如下:

class A
{
public:
	INT  data;
    virtual void test() {};
};

class C
{
public:
	virtual void show() {

	}
};

class B :public A
{
public:
	void test() {
		AfxMessageBox(_T("ok"));
	}

};
//調用如下:
void CtestThreadDlg::OnBnClickedButton14()
{
	A *pA = new A ;
	pA->data = 21;

	C * pC = new C;
	B *pB = dynamic_cast<B*>(pC);
	INT  c = pB->data;
	pB->test();
}

1、對于有繼承關系的兩個類:
   (1)子類轉成父類dynamic_cast和static_cast都沒有問題.
   (2)父類轉成子類,dynamic_cast要求父類中有虛函數,否則編譯不通過。static_cast不作此要求,編譯通過。
       在有虛函數的前提下,如果父類指針的確實指向的是子類實例,dynamic_cast轉換成功,否則返回NULL;
       static_cast對于轉換前的指針是否指向實際子類實例,不作要求,都能轉換成功。     
   (3)在編譯通過成功,且返回指針不為空的前提下,兩者轉換結果指針,都可以用來讀寫父類和子類成員函數和變量。
   (4)如果父類指針不是指向子類實例,編譯都能通過,但是dynamic_cast返回為NULL,不能操作對象;
       static_cast返回非空指針,可以讀寫父類成員變量,也能調用其成員函數。子類的成員函數可以調用,但是當操作涉及子類成員變量時候,不成功。

2、對于沒有繼承關系的兩個類
       static_cast可以編譯通過,dynamic_cast不能編譯通過。兩者都不能讀寫成員變量和函數。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女