C++中关于理解dynamic_cast和static_cast区别的一个极其简单的例 dynamic cast 原理

C++中关于理解dynamic_cast和static_cast区别的一个极其简单的例 dynamic cast 原理
#include <iostream>using namespace std;class color{  public:    virtual void f()     {          cout << "color::f()" << endl;    }   };class red : public color{  public:    void f()     {         cout << "red::f()" << endl;    }   };class blue : public color{  public:    void f()     {         cout << "blue::f()" << endl;    }   };class other{  public:    virtual void f()    {      cout << "other::f()" << endl;    }};int main() {  color *pc = new red;  blue* pb_dynamic = dynamic_cast<blue*>(pc);  blue* pb_static = static_cast<blue*>(pc);  cout << "pb_dynamic: " << pb_dynamic << endl;  cout << "pb_static: " << pb_static << endl;  //pb_dynamic->f();  //pc绑定的是red而不是blue,pb_dynamic为0,调用此句会失败  pb_static->f();  // pc绑定的是red而不是blue,static_cast不识别这些, 而是当做red的函数来处理!  other* _other = new other;  blue* pbo_dynamic = dynamic_cast<blue*>(_other);  //blue* pbo_static = static_cast<blue*>(_other);// _other绑定的是other而不是blue,编译的时候失败  cout << "pbo_dynamic: " << pbo_dynamic << endl;  delete pc;delete _other;  pc = NULL:_other = NULL;  return 0;}//总结:static_cast字面意思是静态转换,编译期间就能判断是否可以转换成功,但是无法识别兄弟指针之间的转换(先提升一个兄弟(red)指针为父指针(color),再向下转换(blue))而dynamic_cast是运行时转换,可以编译通过,但是可以与NULL指针的比较来判断是否转换成功!

  

爱华网本文地址 » http://www.413yy.cn/a/25101014/225500.html

更多阅读

photoshop 前景色和背景色的应用 前景色和背景色的区别

? ??查了很多资料,前景色和背景色的含义?很是模糊,后来联想到现实中画家的画板,就很清楚了。前景色和背景色只是根据人们画画的效果来分的。把整个画布都用一种颜色填充,就是背景色;工具如画笔,画刷使用的颜色就是前景色。一前一后,很明显。

小说关于史今和伍六一的归宿问题 伍六一史今同人

因为太在意伟大的班长和血性的班副最后过得好不好,我直接翻看了原著小说,三页纸的内容,打字可用了一个半小时,为班长和班副,值了!!兰老不要告我侵发犯其著作权哦,真的是因为喜欢痴迷才摘印一段,下不为例!!而且里边一个字一个标点符

现货交易中外盘和内盘的含义_King 现货内盘外盘

近日较多投资者向king_大漠这厮咨询现货交易中关于外盘和内盘的含义及其用法,为了帮助更多的交易者,king_大漠这厮特地整理了一些关于外盘和内盘的资料和含义,供大家参考学习:内盘:在成交量中以主动性叫卖价格成交的数量,所谓主动性叫买,

声明:《C++中关于理解dynamic_cast和static_cast区别的一个极其简单的例 dynamic cast 原理》为网友泠滟侽榊分享!如侵犯到您的合法权益请联系我们删除