下列程序的输出结果是【 】。 #include<iostream> using namespace std; class base{ public: int n; base (int x){n=x;

admin2006-08-25  27

问题 下列程序的输出结果是【  】。
   #include<iostream>
   using namespace std;
   class base{
     public:
       int n;
       base (int x){n=x;}
       virtual void set (int m){n=m;cout<<n<<’’;}
   };
  class deriveA:public base{
   public:
   dericeA(int x):base(x){}
   void set(int m){n+m;cout<<n<<’’;}
};
Class deriveB:public base{
   public:
     deriveB(int x):base(x){}
     void set(int m){n+m;cout<<n<<’’;}
   };
   int main()
   {
     deriveA d1(1);
     deriveB.d2(3);
     base*pbase;
     pbase=&d1;
     pbase->set(1);
     pbase=&d2;
     pbase->set(2);
     return 0;
     }

选项

答案25

解析 本题考核虚函数的定义和调用。在C++中,一个基类指针(或引用)可以用来指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。题中基类成员函数set()被定义成虚函数,而且其派生类deriveA和deriveB都有函数set()的重定义版本,所以通过指针pbase的两次调用分别调用的是派生类deriveA和deriveB中定义的版本,即输出25。
转载请注明原文地址:https://kaotiyun.com/show/23kp777K
0

最新回复(0)