有以下程序:
#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;
程序运行后的输出结果是 【14】 。
参考答案:BE,H
解析: 该程序中定义了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。