小結問題:下面的程式有問題嗎?
class parent
};class child: public parent;
void test(parent* p)
由於基類指標可以直接指向派生類物件(c++賦值相容性原則),因此可能存在指標所指型別與具體指向的物件型別不同的情況
動態型別指的是基類指標所指向的物件的實際型別
void test(parent* p)
基類指標是否可以強制型別轉換為子類指標取決於動態型別!
c++中如何得到動態型別?
c++中的多型根據實際的物件型別呼叫對應的虛函式
可以在基類中定義虛函式返回具體的型別資訊
所有的派生類都必須實現型別相關的虛函式
每個類中的型別虛函式都需要不同的實現
class parent;
virtual int type()
};class child : public parent;
int type()
int add(int a, int b)
};void test(parent* p);
virtual int type()
};class child : public parent
;
int type()
int add(int a, int b)
};void test(parent* p)
};class child : public parent
};void test(parent* p)
};class child : public parent
};class newchild : public parent
;void test(parent* p)
};class child : public parent
};class newchild : public parent
;void test(parent* p)
{ if( typeid(*p) == typeid(child) ) //具體使用方式 child
{child* c = dynamic_cast(p);
cout<<"dynamic type: "<<"child"c++中可以通過多型的方式進行動態型別識別
dynamic_cast關鍵字是可用於動態型別識別
typeid關鍵字在c++中專用於動態型別的識別
C 3種動態型別識別的方法
基類指標所指物件的實際型別 必須從基類開始提供型別虛函式 所有的派生類都必須重寫型別虛函式 每個派生類的型別id必須唯一 dynamic cast這個關鍵字如果要轉換的實際型別和指定的型別不一樣,則會返回null。例如當指定型別為子類物件時,如果父類指標的動態型別是這個子類物件時,沒有錯誤,而動態型...
python之動態人臉識別
執行準備 所需檔案 haarcascade frontalface default.xml 獲取方式 1.開啟cmd,輸入指令 pip install i cv2 2.在安裝python的目錄下面,依次開啟資料夾 lib site packages cv2 data 所需檔案就在裡面了 實現效果 開...
c 型別識別及轉換
1.概念 rtti run time type information 即執行時型別識別,c 通過rtti實現對多型的支援。c 是靜態型別語言,其資料型別是在編譯期就確定的,不能在執行時更改。為了支援rtti,c 提供了乙個type info類和兩個關鍵字typeid和dynamic cast。ty...