一道C++的题目,费解,求教!

来源:百度知道 编辑:UC知道 时间:2024/05/23 12:53:06
#include <iostream>
using namespace std;
class A
{
public:
A()
{printf("A constructed.\n");}
virtual ~A()
{printf("A deconstructed.\n");}
virtual void Fn()
{printf("A fn called.\n");}
};
class B:public A
{
public:
B()
{printf("B constructed.\n");}
virtual ~B()
{printf("B deconstructed.\n");}
virtual void Fn()
{printf("B fn called.\n");}
};

class C:public B
{
public:
C()
{printf("C constructed.\n");}
virtual ~C()
{printf("C deconstructed.\n");}
virtual void Fn()
{printf("C fn called.\n");}
};

int main(int argc,char* grgv[])
{
A *pA=new B;
if(pA!=NULL)
pA->Fn();
B *pB=static_cast<B*>(pA);

if(pB!=NULL)
pB->Fn();

还每看到类,呵呵~~~·

析构的函数太伤脑了。没耐心看下去

因为在main函数中涉及到的三个指针pA pB pC其实都是指向的一个对象new B;
虽然class A B C都定义了Fn(),但它们是虚函数,所以它们调用的p->Fn()取决于指针当前所指的对象版本,及其实都是B.Fn().