c++15.0 RTTI機(jī)制耗溜, 類型轉(zhuǎn)換操作, 表達(dá)式類型推斷與獲取


c++的語法省容,我準(zhǔn)備要結(jié)束了抖拴,c++東西還有很多,比如多線程蓉冈,c11新特性等城舞,我不是很熟,以后有時間在補(bǔ)充吧寞酿。準(zhǔn)備寫c#了家夺,原本準(zhǔn)備開始java語法的,但是看到簡書上面好多是有關(guān)java的文章伐弹,寫的都很不錯(至少我感覺寫不出更好的了)拉馋,決定換一個方向,語法是通用的惨好,但是還是有些不同之處煌茴,c#的.net平臺,好歹是能和j2ee對立的日川,怎么能沒有人介紹了蔓腐。

知識點綜述:

 RTTI機(jī)制:
 通過運行時類型識別,程序通過使用基類的指針或者引
 用來檢查這些指針或引用所指向?qū)ο蟮膶嶋H類型龄句。

  操作符:
 dynamic_cast 
 1.0 將基類的指針或引用安全的轉(zhuǎn)換為其它派生類的指針或引用回论。
 2.0 注意dynamic_cast轉(zhuǎn)換符只能用于含有虛函數(shù)的類,
 其表達(dá)式為dynamic_cast<類型>(表達(dá)式)分歇。
 3.0 如果dynamic_cast轉(zhuǎn)換指針類型失敗傀蓉,則返回0;
 如果轉(zhuǎn)換引用類型失敗职抡,則拋出一個bad_cast類型的異常葬燎。

 typeid //換回指針或引用所指向的類型

 類型轉(zhuǎn)換操作
 static_cast,
 形式 static_cast<目標(biāo)數(shù)據(jù)類型>(源數(shù)據(jù)類型表達(dá)式)
 比如: int a; 
         static_cast<double>(a);
         等價于: (double)a;
 const_cast
  把const指針變成非const類型指針缚甩。

  typeinfo

  表達(dá)式類型推斷與獲取,好像是c11新特性
  auto:當(dāng)編譯器能夠在一個變量的聲明時候就推斷出它的類型
  獲取vector迭代器
  以前 
    vector<double> vec;
    vector<double>::iterator ite=vec.iterator();
 現(xiàn)在
   vector<double> vec;
   auto ite=vec.iterator();

c++手冊相關(guān)函數(shù)的介紹:

dynamic_cast.PNG
const_cast.PNG
static_cast.PNG
typeid.PNG

好像看圖更加利于學(xué)習(xí)谱净。

相關(guān)代碼,里面有相關(guān)的注解


#include<iostream>
#include<string>
using namespace std;

class A {
protected:
    string name;
public:
    A(string name);
    virtual void display();
};

A::A(string name) {
    this->name = name;
    cout << "construct A" << endl;
}

void A::display() {
    cout << "my name is" << name << endl;
}

class B:public A
{
public:
    B(string name,string n);
    void display();
};

B::B(string name, string n):A(n)
{
    this->name = name;
    cout << "construct B" << endl;
}
void B::display() {
    cout << "my name is" << name << endl;
}



int main()
{
    /*
     B b("B", "A");
     A *p0 = &b;
     p0->display();
    */
//等效下面的語句
    A *p = new B("B","A");
    B *pb = dynamic_cast<B*>(p); //轉(zhuǎn)換安全蹄胰。
   //dynamic_class 需要多態(tài)
    if (pb != NULL)
    {
        //多態(tài)調(diào)用B繼承A的構(gòu)造函數(shù)
        pb->display();
//多態(tài)只有父類的指針指向子類岳遥,或者引用才行。c++中裕寨,java不一樣
    }
    else
        cout << "轉(zhuǎn)換不安全,退出" << endl;

    A *pa = new A("A");
    B *p2 = dynamic_cast<B*>(pa);
    if (p2!=NULL)
    {
        p2->display();
    }
    else
        cout << "轉(zhuǎn)換不安全,退出" << endl;

    cout << "----------------------" << endl;
//typeid判斷數(shù)據(jù)類型
    cout<<"\"dflx\" type:"<< typeid("dflx").name() << endl;
    cout<<"6 type:" << typeid(6).name() << endl;
//const_cast,消除const屬性
    int a = 66;
//b是指針產(chǎn)量宾袜,不能改變
    const int *b = &a; //b指向的單元不可改寫捻艳。
    *(const_cast<int*>(b)) = 88; //消除const屬性
    cout << "a="<<a << endl << "*b=" << *b << endl;
    cout << "----------------------" << endl;
//static_cast 強(qiáng)制類型轉(zhuǎn)換符
    cout << static_cast<int>(9.999) << endl;
    cout << "----------------------" << endl;
//auto 通知編譯器根據(jù)初始化代碼判斷數(shù)據(jù)類型
    auto c = 22; //c是int類型。
    char ch[] = { 'a','b','c' };
    //c為 char類型
    for (auto c : ch)
        cout << c << "  ";
    cout << endl;
//decltype,獲取一個表達(dá)式類型庆猫。

    system("pause");
    return 0;
}

試驗結(jié)果:

construct A
construct B
my name isB
construct A
轉(zhuǎn)換不安全认轨,退出
----------------------
"dflx" type:char const [5]
6 type:int
a=88
*b=88
----------------------
9
----------------------
a  b  c

十一感冒到現(xiàn)在還沒有好,有時候咳著眼淚都出來了月培,看來還是要加強(qiáng)身體的鍛煉嘁字。



參考文章:
C++中RTTI機(jī)制剖析
C++中四種類型轉(zhuǎn)換方式
比較C++中的4種類型轉(zhuǎn)換方式
C++11 新特性之自動類型推斷和類型獲取

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市杉畜,隨后出現(xiàn)的幾起案子纪蜒,更是在濱河造成了極大的恐慌,老刑警劉巖此叠,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纯续,死亡現(xiàn)場離奇詭異,居然都是意外死亡灭袁,警方通過查閱死者的電腦和手機(jī)猬错,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茸歧,“玉大人倦炒,你說我怎么就攤上這事∪硐梗” “怎么了逢唤?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铜涉。 經(jīng)常有香客問我智玻,道長,這世上最難降的妖魔是什么芙代? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任吊奢,我火速辦了婚禮,結(jié)果婚禮上纹烹,老公的妹妹穿的比我還像新娘页滚。我一直安慰自己,他們只是感情好铺呵,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布裹驰。 她就那樣靜靜地躺著,像睡著了一般片挂。 火紅的嫁衣襯著肌膚如雪幻林。 梳的紋絲不亂的頭發(fā)上贞盯,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機(jī)與錄音沪饺,去河邊找鬼躏敢。 笑死,一個胖子當(dāng)著我的面吹牛整葡,可吹牛的內(nèi)容都是我干的件余。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼遭居,長吁一口氣:“原來是場噩夢啊……” “哼啼器!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起俱萍,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤端壳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鼠次,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體更哄,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年腥寇,在試婚紗的時候發(fā)現(xiàn)自己被綠了成翩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡赦役,死狀恐怖麻敌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掂摔,我是刑警寧澤术羔,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站乙漓,受9級特大地震影響级历,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叭披,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一寥殖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涩蜘,春花似錦嚼贡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至误窖,卻和暖如春叮盘,著一層夾襖步出監(jiān)牢的瞬間秩贰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工熊户, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留萍膛,地道東北人吭服。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓嚷堡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親艇棕。 傳聞我的和親對象是個殘疾皇子蝌戒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,859評論 6 342
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法沼琉,內(nèi)部類的語法北苟,繼承相關(guān)的語法,異常的語法打瘪,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,304評論 25 707
  • 鶴沖天 觀海于萬平口 萬平口處友鼻,哪里桑榆暮! 驚濤如振鼓闺骚,何處溯彩扔? 沉浮有幾許,但因風(fēng)云護(hù)僻爽。 放遠(yuǎn)千里目虫碉,魚龍潛躍...
    年輕的風(fēng)閱讀 170評論 2 1
  • 岸邊賞荷悅目,魚在荷下避暑胸梆。不請風(fēng)自來敦捧,搖動一池花語。誰共碰镜,誰共兢卵。藕斷絲連情重。
    半月嬋閱讀 366評論 2 10