dynamic_cast

// dynamic_cast_8.cpp
// compile with: /GR /EHsc
#include <stdio.h>
#include <iostream>


struct A {
virtual void test() {
printf_s("in A\n");
}
};


struct B : A {
virtual void test() {
printf_s("in B\n");
}


void test2() {
printf_s("test2 in B\n");
}
};


struct C : B {
virtual void test() {
printf_s("in C\n");
}


void test2() {
printf_s("test2 in C\n");
}
};


void Globaltest(A& a) {
try {
C &c = dynamic_cast<C&>(a);
printf_s("in GlobalTest\n");
}
catch(std::bad_cast) {
printf_s("Can't cast to C\n");
}
}


int main() {
A *pa = new C;
A *pa2 = new B;


pa->test(); //in C 虚函数 根据 对象类型 确定


B * pb = dynamic_cast<B *>(pa);
if (pb)
pb->test2(); // test2 in B  重名的非虚函数 根据 指针类型 确定


C * pc = dynamic_cast<C *>(pa2); //pa2 指向的对象不包含c对象,不可以转换 则pc为NuLL
if (pc)
pc->test2(); 


C ConStack;
Globaltest(ConStack);// in GlobalTest


// will fail because B knows nothing about C
B BonStack;
Globaltest(BonStack);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值