问题 填空题

下列程序的输出结果是 【15】 。 #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。

单项选择题 A1型题
问答题