visual C++程序设计全程指南 虚函数

        26A P58

                 #include <iostream.h>

     #include <iostream.h>
     class A
     {
      public:
    void print()  //声明虚函数print();
    {
  cout<<"调用基类A的成员函数print().\n";
    }
     };
     class B:public A  //定义派生类B;
     {
     public:
   void print()//声明函数print();
   {
  cout<<"调用派生类B的成员函数print().\n";
   }
    };
   void main()
    {
   A a;  //生成类A的实例a;
   B b;  //生成类B的实例b;
   A* p1=&a;  //定义基类A的指针p1指向实例a;
   A* p2=&b;  //定义基类A的指针p2指向实例b;
   p1->print();  //调用基类的成员函数print();
   p2->print();  //调用派生类的成员函数print();
    }




                          P26B

              #include <iostream.h>

     #include <iostream.h>
     class A
     {
      public:
    virtual void print()  //声明虚函数print();   //定义虚函数
    {
  cout<<"调用基类A的成员函数print().\n";
    }
     };
     class B:public A  //定义派生类B;
     {
     public:
   void print()//声明函数print();
   {
  cout<<"调用派生类B的成员函数print().\n";
   }
    };
   void main()
    {
   A a;  //生成类A的实例a;
   B b;  //生成类B的实例b;
   A* p1=&a;  //定义基类A的指针p1指向实例a;
   A* p2=&b;  //定义基类A的指针p2指向实例b;
   p1->print();  //调用基类的成员函数print();
   p2->print();  //调用派生类的成员函数print();

    }


 从程序的运行结果可以看出,虽然程序1的基类指针P2指向派生类,但是编译器调用的还是基类

的成员函数print().程序2在使用虚函数后,基类指针P2能够正确地调用派生类的成员函数print().

 在程序2中,派生类B的成员函数print()可以没有关键词virtual 修饰,但是它也是虚函数。在c++

中,只要把基类的成员函数设定为虚函数,那么其派生类相应的函数也自动成为虚函数。








猜你喜欢

转载自blog.csdn.net/czhaii/article/details/16354761