下列程序的输出结果是______。
#include<iostream>
using namespace std;
class A
int a;
public:
A( ):a(9)
virtual void print( )constcout<<a;;
;
class B:public A
char b;
public:
B( )b=’S’;
void print()eonstcout<<b;
;
void show(A &X)X.print( );
int main( )
A dl,*P;
B d2;
P=&d2;
d1.print( );
d2.print( );
p->print( );
show(d1);
show(d2);
return 0;
参考答案:9SS9S
解析: d1是基类A的对象,故d1.print( )调用基类成员虚函数,打印9;d2是派生类B的对象,故d2.print( )调用派生类B的成员函数,打印S;p是基类指针,指向派生类对象,执行p->print( )时,可以访问从基类继承来的成员,故执行派生类B的重新定义的虚成员函数,打印S;show(d1),show函数的形参类型为A,所以执行类A的print( )函数,打印9;同样,执行show(d2)时,将派生类对象赋值给形参A类型,执行的是对虚函数进行重新定义后的print( ),打印S。