青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

asm, c, c++ are my all
-- Core In Computer
posts - 139,  comments - 123,  trackbacks - 0
[轉(zhuǎn)]Run time type Information

一???????????????? dynamic_cast
< type-id > ( expression )
? type-id :必須是指針或者引用
? expression:必須是指針或者一個(gè)左值
基本上是用來(lái)做 子對(duì)象間的轉(zhuǎn)換
1.基本的用法
				class B { ... };
class C : public B { ... };
class D : public C { ... };

void f(D* pd)
{
   C* pc = dynamic_cast<C*>(pd);   // ok: C is a direct base class
                                 // pc points to C subobject of pd 

   B* pb = dynamic_cast<B*>(pd);   // ok: B is an indirect base class
                                 // pb points to B subobject of pd 
   ...
}
		

This type of conversion is called an "upcast" because it moves a pointer up a class hierarchy, from a derived class to a class it is derived from. An upcast is an implicit conversion.

If type-id is void*, a run-time check is made to determine the actual type of expression. The result is a pointer to the complete object pointed to by expression. For example:

				class A { ... };

class B { ... };

void f()
{
   A* pa = new A;
   B* pb = new B;
   void* pv = dynamic_cast<void*>(pa);
   // pv now points to an object of type A
   ...
   pv = dynamic_cast<void*>(pb);
   // pv now points to an object of type B
}
		

If type-id is not void*, a run-time check is made to see if the object pointed to by expression can be converted to the type pointed to by type-id.

If the type of expression is a base class of the type of type-id, a run-time check is made to see if expression actually points to a complete object of the type of type-id. If this is true, the result is a pointer to a complete object of the type of type-id. For example:

				class B { ... };
class D : public B { ... };

void f()
{
   B* pb = new D;                     // unclear but ok
   B* pb2 = new B;

   D* pd = dynamic_cast<D*>(pb);      // ok: pb actually points to a D
   ...
   D* pd2 = dynamic_cast<D*>(pb2);   // pb2 points to a B not a D
                                    // cast was bad so pd2 == NULL
   ...
}
		

This type of conversion is called a "downcast" because it moves a pointer down a class hierarchy, from a given class to a class derived from it.
小結(jié):
? a???? 實(shí)際指向?qū)ο?和?? b 目標(biāo)對(duì)象,? b 是a 的 基類(子對(duì)象),或者是2者 同級(jí)轉(zhuǎn)換才成功
否則 目標(biāo)為NULL;也就是說(shuō)不能向下轉(zhuǎn)



2?? 多重非虛的繼承模式

Class Hierarchy Showing Multiple Inheritance

A pointer to an object of type D can be safely cast to B or C. However, if D is cast to point to an A object, which instance of A would result? This would result in an ambiguous casting error. To get around this problem, you can perform two unambiguous casts. For example:

				void f()
{
   D* pd = new D;
   A* pa = dynamic_cast<A*>(pd);      // error: ambiguous
   B* pb = dynamic_cast<B*>(pd);      // first cast to B
   A* pa2 = dynamic_cast<A*>(pb);   // ok: unambiguous
}
		

Further ambiguities can be introduced when you use virtual base classes. Consider the class hierarchy shown in the following figure.

??? 也就是說(shuō)在2意性下會(huì)失敗
3.子對(duì)象間的轉(zhuǎn)換

Class Hierarchy Showing Duplicate Base Classes

????//pd 指向 e 對(duì)象
void f(D* pd)
{
?? E* pe = dynamic_cast<E*>(pd);
?? B* pb = pe;????? // upcast, implicit conversion
?? A* pa = pb;????? // upcast, implicit conversion
}

//pd 指向 e 對(duì)象
void f(D* pd)
{
?? B* pb = dynamic_cast<B*>(pd);????? // cross cast
?? A* pa = pb;????????????????? // upcast, implicit conversion
}

? 也就是? 所謂 cross cast

二? typeid( type-id )???? typeid( expression )?
?? 此操作符返回個(gè)? const type_info &?
??????????? expression?必須指向一個(gè)多態(tài)類型(帶虛函數(shù)??? ),并且要解引用

#include <iostream>
#include <typeinfo.h>

class Base {
public:
?? virtual void vvfunc() {}
};

class Derived : public Base {};

using namespace std;
int main()
{
?? Derived* pd = new Derived;
?? Base* pb = pd;
?? cout << typeid( pb ).name() << endl;?? //prints "class Base *"
?? cout << typeid( *pb ).name() << endl;?? //prints "class Derived"
?? cout << typeid( pd ).name() << endl;?? //prints "class Derived *"
?? cout << typeid( *pd ).name() << endl;?? //prints "class Derived"
?? delete pd;
}
// compile with: /GR /EHsc

在模版中使用
template < typename T > T max( T arg1, T arg2 ) {
?? cout << typeid( T ).name() << "s compared." << endl;
?? return ( arg1 > arg2 ? arg1 : arg2 );
}

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

還不知道dynamic_cast<void*>()能轉(zhuǎn)換成真實(shí)類型的指針。有這個(gè)功能,真太好了。
等C++0x出來(lái)后,就可以用:
auto pv = dynamic_cast<void*>(...)來(lái)獲取真實(shí)類型了。

posted on 2006-07-04 21:03 Jerry Cat 閱讀(360) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理



<2006年9月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用鏈接

留言簿(7)

隨筆檔案

最新隨筆

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲天堂免费观看| 欧美xx视频| 久久久久久久成人| 欧美中文在线观看| 欧美好骚综合网| 欧美成人性生活| 亚洲高清在线视频| 免费高清在线视频一区·| 久久久久久久91| 欧美a级大片| 亚洲理伦电影| aa级大片欧美三级| 性娇小13――14欧美| 久久精品国产一区二区三区免费看| 久久九九热免费视频| 麻豆成人精品| 国产精品美女一区二区在线观看| 国产精品九九| 在线日韩av永久免费观看| 一区二区不卡在线视频 午夜欧美不卡'| 一区二区三区av| 久久久精品五月天| 亚洲免费观看高清完整版在线观看| 亚洲无吗在线| 欧美激情1区| 国产一级精品aaaaa看| 亚洲靠逼com| 欧美三级小说| 精品av久久久久电影| 一本色道久久综合狠狠躁的推荐| 欧美一区二区三区在| 欧美成人按摩| 欧美一区免费| 国产精品美女黄网| 亚洲人成在线观看网站高清| 欧美一区二区私人影院日本 | 伊人成综合网伊人222| 亚洲精品视频免费观看| 久久福利一区| 日韩一级网站| 欧美韩国日本一区| 精品动漫3d一区二区三区| 亚洲欧美在线一区二区| 亚洲国产日韩在线| 久久久久国产免费免费| 国产欧美高清| 先锋影音网一区二区| 亚洲精品中文字幕在线| 久久综合中文色婷婷| 国产精品一区二区三区四区五区| 亚洲精品一级| 欧美va亚洲va香蕉在线| 午夜精品一区二区三区在线| 欧美日韩福利在线观看| 日韩视频免费大全中文字幕| 欧美国产视频日韩| 久久久久国产精品厨房| 国产亚洲一区精品| 欧美在线综合| 亚洲欧美日韩在线播放| 亚洲精品一区在线观看香蕉| 久久久精品2019中文字幕神马| 一区二区三区欧美| 欧美丝袜一区二区三区| 亚洲美女黄网| 欧美激情影音先锋| 欧美成人精品高清在线播放| 尤物网精品视频| 欧美好吊妞视频| 欧美sm视频| 亚洲视频日本| 亚洲视频在线一区| 国产视频在线观看一区| 久久艳片www.17c.com| 久久亚洲国产成人| 日韩视频免费| 亚洲在线观看视频| 国产综合18久久久久久| 久久久www成人免费毛片麻豆| 欧美专区第一页| 亚洲国产一区视频| 亚洲精品麻豆| 国产精品一区二区a| 久久精品91久久香蕉加勒比| 欧美一区亚洲一区| 亚洲精品久久久久久下一站| 亚洲欧洲在线一区| 欧美日韩一二三区| 久久久久国产免费免费| 媚黑女一区二区| 亚洲欧美偷拍卡通变态| 欧美专区日韩专区| 99视频在线精品国自产拍免费观看 | 中文在线不卡| 欧美一区二视频在线免费观看| 在线色欧美三级视频| 日韩视频免费观看高清在线视频| 欧美性大战久久久久| 免费成人美女女| 国产精品一区二区你懂得| 嫩草国产精品入口| 亚洲欧美999| 老司机aⅴ在线精品导航| 亚洲网站视频| 久久嫩草精品久久久久| 亚洲制服av| 久久综合久久综合这里只有精品 | 国产精品美女久久久浪潮软件| 久久久久国产精品一区| 欧美日韩美女| 欧美成人小视频| 国产亚洲精品久久久| 亚洲黄色影院| 在线观看中文字幕亚洲| 一区二区三区精品在线| 亚洲电影免费在线| 欧美一区二区免费| 在线视频日韩精品| 欧美激情亚洲精品| 久久精品视频播放| 欧美色精品天天在线观看视频| 久久综合色天天久久综合图片| 国产精品久久久久91| 亚洲精品久久久久中文字幕欢迎你| 国内精品久久久久久久果冻传媒 | 亚洲欧美综合精品久久成人| 欧美精品亚洲精品| 欧美激情自拍| 在线视频国内自拍亚洲视频| 先锋影院在线亚洲| 一区二区三区国产精品| 欧美xart系列在线观看| 欧美激情国产精品| 亚洲福利精品| 美国成人毛片| 亚洲经典在线| 99精品国产在热久久婷婷| 免费日韩av电影| 亚洲国产高清一区| 亚洲免费高清| 欧美日韩免费在线观看| 亚洲人午夜精品| 亚洲综合色网站| 国产欧美日韩激情| 欧美专区日韩视频| 女人色偷偷aa久久天堂| 亚洲品质自拍| 欧美日韩另类一区| 亚洲一级黄色片| 久久久久久久综合| 在线日韩av永久免费观看| 美女爽到呻吟久久久久| 亚洲国产婷婷香蕉久久久久久99| 亚洲免费成人av电影| 欧美色网在线| 欧美在线一二三| 亚洲国产成人高清精品| 亚洲天天影视| 国产在线麻豆精品观看| 久久久爽爽爽美女图片| 欧美大胆人体视频| 亚洲视频综合在线| 国产一区二区中文| 欧美电影免费观看| 亚洲婷婷在线| 免费亚洲电影在线观看| 一区二区免费在线观看| 国产午夜一区二区三区| 免费人成网站在线观看欧美高清| 在线午夜精品自拍| 欧美成人激情视频| 亚洲影院污污.| 国内久久精品视频| 欧美日韩高清在线播放| 欧美在线一二三区| 亚洲精品久久久久久久久久久久久| 亚洲欧美在线免费观看| 亚洲精品乱码久久久久久久久| 欧美视频一区二区| 久久中文久久字幕| 午夜精品婷婷| 99re视频这里只有精品| 男同欧美伦乱| 亚洲主播在线播放| 免费观看在线综合色| 一色屋精品亚洲香蕉网站| 欧美一区二区久久久| 亚洲成在人线av| 国产伦精品一区二区三区在线观看 | 亚洲自拍偷拍网址| 亚洲国产精品毛片| 久久久xxx| 亚洲欧美日韩国产综合| 亚洲精品美女91| 韩国av一区二区| 国产精品久久91| 欧美日韩国产综合一区二区| 美女任你摸久久| 久久久午夜视频| 久久精品伊人|