有以下程序: #include <iostream> using namespace std; class A { public: virtual void setx(int i,int

admin2010-03-29  47

问题 有以下程序:
    #include  <iostream>
    using  namespace  std;
    class  A
    {
    public:
      virtual  void  setx(int  i,int  j=0)
      {
         x=i;
         y=j;
      }
      virtual  void  print()=0;
    protected:
       int  x,y;
    };
    class  B  :  public  A
    {
    public:
       void  print()
       {
          cout<<X*x<<",";
       }
   };
   class C:publiC A
   {
   publiC:
      void print()
      {
         cout<<x*x*x<<end1;
      }
   };
   int main()
   {
      A  *pa;
      B  b;
      C  c;
      pa=&b;
      pa->setx(5);
      pa->print();
      pa=&c;
      pa->setx(2);
      pa->print();
      return 0;
   }
   程序运行后的输出结果是【  】。

选项

答案25,8

解析 该程序中定义了A类、B类和C类共3个类。其中,类A是抽象类,它的类体内有一个纯虚函数print()。抽象类不可以定义对象,但可以定义指向对象的指针。类B和类C都是类A的公有派生类,这些类是具体类,它们对A类中纯虚函数都有不同的实现。该程序的主函数中,定义一个指向类A对象的指针pa,又定义了类B和类C的2个对象,并使指针pa分别指向这些对象。这里,采用动态联编,在运行时选择print()函数。所以执行语句序列“pa=&b;pa->setx(5);pa->print();”后,系统调用类B的print()函数,输出25。执行语句序列“pa=&c;pa->setx(2);pa->print();”后,系统调用类C的print()函数,输出8。
转载请注明原文地址:https://kaotiyun.com/show/qVjp777K
0

最新回复(0)