下列程序的输出结果是【 】。 #include <iostream> using namespace std; class A { int a; public: A():a(9){} virtu

admin2013-05-30  34

问题 下列程序的输出结果是【  】。
   #include <iostream>
   using namespace std;
   class A {
      int a;
   public:
      A():a(9){}
      virtual void print() const { cout<<a;};
   };
   class B: public A {
       char b;
   public:
       B( ){b=’S’;}
       void print() const {cout<<b;}
   };
   void show(A &x){ x.print0;}
   int main()
   {  Ad1,*p;
      B d2;
      p=&d2;
      d1.print();
      d2.print0;
      p->print();
      show(d1);
      show(d2);
      return 0;}

选项

答案9SS9S

解析 本题主要考查虚函数的运用。在主函数中,首先通过基类对象d1调用print()函数,即调用基类的print()函数,输出一个9。然后通过派生类对象d2调用print()函数,即调用派生类的print()函数,输出一个’S’。接下来通过基类指针p调用print()函数,p此时指向的是派生类对象,而print()函数是虚函数,根据选择题(35)的解析,此时调用的是派生类的print()函数,输出一个’S’。然后,将基类对象d1传递给 show()函数,show()函数通过基类类型引用形参x调用print()函数,此时调用基类的 print()函数,输出一个’9’。最后,将派生类对象d2传递给show()函数,此时show()函数中通过基类类型引用x调用派生类对象d2的print()函数,根据虚函数的性质,应该调用的是派生类的print()函数,输出一个’S’。故最终输出的结果是:9SS9S。
转载请注明原文地址:https://jikaoti.com/ti/rxE0FFFM
0

最新回复(0)