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

admin2010-12-16  28

问题 下列程序的输出结果是______。
   #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:
      deriveA(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://jikaoti.com/ti/IYW0FFFM
0

最新回复(0)