首页 > 代码库 > RTTI之dynamic_cast运算符
RTTI之dynamic_cast运算符
#include <iostream>#include <cstdlib>#include <ctime>using std::cout;class Grand{ private: int hold; public: Grand(int h=0):hold(h){} virtual void Speak() const {cout << "I am a grand class!\n";} virtual int Value() const {return hold;}};class Superb:public Grand{ public: Superb(int h=0):Grand(h){} void Speak() const {cout << "I am a superb class!\n";} virtual void Say() const { cout << "I hold the superb value of " << Value() << "!\n"; }};class Magnificent:public Superb{ private: char ch; public: Magnificent(int h=0, char c=‘A‘) : Superb(h),ch(c){} void Speak() const {cout << "I am a magnificent class!!!\n";} void Say() const {cout << "I hold the character " << ch << " and th e integer " << Value() << "!\n";}};Grand * Getone();int main(){ std::srand(std::time(0)); Grand * pg; Superb * ps; for(int i=0;i<5;i++) { pg=Getone(); pg->Speak(); if(ps=dynamic_cast<Superb *>(pg)) ps->Say(); } return 0;}Grand * Getone(){ Grand * p; switch(std::rand()%3) { case 0: p=new Grand(std::rand()%100); break; case 1:p=new Superb(std::rand()%100); break; case 2:p=new Magnificent(std::rand()%100,‘A‘+std::rand()%26); break; } return p;}
Superb * pm=dynamic_cast<Superb *>(pg)提出了这样的问题:指针pg的类型是否可被安全地转换为Superb *?如果可以,运算符将返回对象的地址,否则返回一个空指针。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。