【发布时间】:2012-09-17 06:01:38
【问题描述】:
如果我们看到下面的代码,fun 函数将 C 的对象转换为 B 的对象并调用 B 自己的函数。它怎么不给出段错误。我认为这会导致崩溃。 我的程序没有崩溃。任何人都可以解释为什么它工作正常。
#include<iostream>
using namespace std;
class A{
public:
A() {cout<<"A's Con\n"; }
~A() {cout<<"A's De\n"; }
};
class B :public A
{
public:
B() {cout<<"B's Con\n"; }
~B() {cout<<"B's De\n"; }
void printb(){cout<<"B print function\n";}
void printb2(){cout<<"B print2 function\n";}
};
class C :public A
{
public:
C() {cout<<"C's Con\n"; }
~C() {cout<<"C's De\n"; }
void printc(){cout<<"C print function\n";}
};
void fun(A *ap)
{
B *bp = (B*) ap;
bp->printb2();
}
int main()
{
C c;
fun(&c);
return 0;
}
【问题讨论】:
-
未定义的行为,任何事情都可能发生。
-
正确的缩进和正确的英文会有所帮助
-
sry.. 写的时候注意力不集中
-
嗨,我如何在不使用 dynamic_cast 的情况下进行运行时类型检查,我不想使用 dynamic_cast ,我可以使用 static_cast 或任何其他////
标签: c++ inheritance casting static-cast