程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++:RTTI(RunTime Type Information)運行時類型信息 詳解

C++:RTTI(RunTime Type Information)運行時類型信息 詳解

編輯:關於C++

RTTI, RunTime Type Information, 運行時類型信息, 是多態的主要組成部分,

通過運行時(runtime)確定使用的類型, 執行不同的函數,復用(reuse)接口.

dynamic_cast<>可以 使基類指針轉換為派生類的指針, 通過判斷指針的類型, 可以決定使用的函數.

typeid(), 可以判斷類型信息, 判斷指針指向位置, 在多態中, 可以判斷基類還是派生類.

代碼:

/* 
 * test.cpp 
 * 
 *  Created on: 2014.04.22 
 *      Author: Spike 
 */
      
/*eclipse cdt, gcc 4.8.1*/
      
#include <iostream>  
#include <typeinfo>  
      
      
using namespace std;  
      
class Base {  
public:  
    virtual void fcnA() {  
        std::cout << "base" << std::endl;  
    }  
};  
      
class Derived : public Base {  
public:  
    virtual void fcnB() {  
        std::cout << "derived" << std::endl;  
    }  
};  
      
void fcnC(Base* p) {  
    Derived* dp = dynamic_cast<Derived*>(p);  
    if (dp != NULL)  
        dp->fcnB();  
    else
        p->fcnA();  
}  
      
void fcnD(Base* p) {  
    if (typeid(*p) == typeid(Derived)) {  
        Derived* dp = dynamic_cast<Derived*>(p);  
        dp->fcnB();  
    } else
        p->fcnA();  
}  
      
int main(void) {  
    Base* cp = new Derived;  
    std::cout << typeid(cp).name() << std::endl;  
    std::cout << typeid(*cp).name() << std::endl;  
    std::cout << typeid(&(*cp)).name() << std::endl;  
    fcnC(cp);  
    fcnD(cp);  
    Base* dp = new Base;  
    fcnC(dp);  
    fcnD(dp);  
      
    return 0;  
}

輸出:

P4Base  
7Derived  
P4Base  
derived  
derived  
base  
base

以上代碼只是示例,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved