如果我們看到下面的代碼,fun函數會將C的對象轉換爲B的對象並調用B的自己的函數。它怎麼不給segm過錯。我認爲這會導致崩潰。 我的程序沒有崩潰。任何人都可以解釋爲什麼它工作正常。Regular cast doesnot throw runtime error
#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 ..我沒有專心寫很多 – ranganath111