虚拟函数

#include "stdio.h"

 

class A{

  public:

    void print()

    {

      printf("%s","this is A\n");

    }

};

 

class B:public A{

  public:

    void print()

    {

      printf("%s","this is B\n");

    } 

};

 

int main()

{

  int i=1;

  A a;  

  B b;

  a.print();  //输出this is A

  b.print();  //输出this is B

  A* point_a=&a;

  point_a->print();

  return 0;

}

上面标成蓝色的两行

如果是:

  A* point_a=&a;

  的时候输出结果是:

  This is A

如果是:

  A* point_a=&b;

  的时候输出结果是:

  This is A

如果是:

  B* point_a=&b;

  的时候输出结果是:

  This is B

如果是:

  B* point_a=&a;  

  这个编译是会报错的

 

 

如果都写成虚拟函数

#include "stdio.h"

 

class A{

  public:

    virtual void print()

    {

      printf("%s","this is A\n");

    }

};

 

class B:public A{

  public:

    virtual void print()

    {

      printf("%s","this is B\n");

    } 

};

 

int main()

{

  int i=1;

  A a;  

  B b;

  a.print();//输出this is A

  b.print();//输出this is B

  A* point_a=&a;

  point_a->print();

  return 0;

}

上面标成蓝色的两行

如果是:

  A* point_a=&a;

  的时候输出结果是:

  This is A

如果是:

  A* point_a=&b;

  的时候输出结果是:

  This is B

如果是:

  B* point_a=&b;

  的时候输出结果是:

  This is B

如果是:

  B* point_a=&a;  

  这个编译是会报错的

posted on 2012-01-18 15:08  不知道  阅读(157)  评论(0编辑  收藏  举报

导航