C++ 函數參數詳解:運行時類型識別在參數傳遞中的作用
在 C++ 中,函數參數傳遞可以通過值傳遞、引用傳遞或指針傳遞實現。每種傳遞方式都有各自的優缺點。
運行時類型識別 (RTTI) 是 C++ 中一種在運行時獲取對象類型的機制。它允許我們確定對象的實際類型,即使該對象被存儲在基類指針或引用中。
通過使用 RTTI,我們可以實現以下功能:
在不了解具體類型的情況下調用虛方法
確定對象的實際類型
動態轉換對象類型
在參數傳遞中使用 RTTI
在函數參數傳遞中,RTTI 可以用于實現多態性。多態性允許我們通過基類指針或引用調用派生類的方法。為了實現多態性,我們需要以下步驟:
-
在基類中聲明一個虛方法。
在派生類中重寫虛方法。
使用 RTTI 在運行時確定對象的實際類型。
根據對象類型調用相應的方法。
實戰案例
考慮以下代碼中的示例:
#include <iostream> using namespace std; class Base { public: virtual void print() { cout << "Base class print" << endl; } }; class Derived : public Base { public: void print() { cout << "Derived class print" << endl; } }; void printObject(Base* obj) { // 使用 RTTI 確定對象的實際類型 if (dynamic_cast<Derived*>(obj)) { // 如果對象是派生類類型,調用派生類方法 static_cast<Derived*>(obj)->print(); } else { // 否則,調用基類方法 obj->print(); } } int main() { Base* baseObj = new Base(); printObject(baseObj); // 輸出:Base class print Derived* derivedObj = new Derived(); printObject(derivedObj); // 輸出:Derived class print return 0; }
登錄后復制
在本例中,printObject
函數使用 RTTI 來確定傳遞給它的對象的實際類型。如果對象是派生類類型,它調用派生類方法。否則,它調用基類方法。