问个C++ 关于 dynamic_cast的问题
答案:2 悬赏:20
解决时间 2021-02-15 00:42
- 提问者网友:雨不眠的下
- 2021-02-14 12:23
问个C++ 关于 dynamic_cast的问题
最佳答案
- 二级知识专家网友:冷風如刀
- 2021-02-14 13:45
class A{
public:
A(){}
virtual void fun(){
cout<<"A fun invoked!"<
void foo(){
cout<<"A foo invoked!"<
};
class B: public A{
public:
void fun(){
cout<<"B fun invoked!"<
void foo(){
cout<<"B foo invoked!"<
};
int main(){
A* a = new A();
B* b = new B();
//B* b1 = new A(); potential error - base class downcast
(dynamic_cast (b))->fun(); //alredy overrided, b foo invoked
(dynamic_cast (a))->fun(); //cause runtime error because of downcast
导致运行时错误,因为向下转换了,
指针的转换可以从派生类转换为基类,不可以从基类转换为派生类
(dynamic_cast (b))->foo(); //a foo invoked
(dynamic_cast (a))->foo(); //b foo invoked
return 0;
}
全部回答
- 1楼网友:想偏头吻你
- 2021-02-14 14:55
这两句话, 没有实质区别...
一个是c的形式, 一个是C++的形式.
就是把 基类指针 转换成 子类指针.
这个必须要 显示转换(否则会有编译错误), 因为它是向下转换.
C1 * p = new C2() // 这个是向上转换, 它是自动的, 可以隐式转换.
一个是c的形式, 一个是C++的形式.
就是把 基类指针 转换成 子类指针.
这个必须要 显示转换(否则会有编译错误), 因为它是向下转换.
C1 * p = new C2() // 这个是向上转换, 它是自动的, 可以隐式转换.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯