如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制。
#include<iostream>using namespace std;class Base{ int a,b;public: Base(int x,int y){a=x;b=y;} void show(){cout<<a<<’,’<<b<<endl;}};class Derived:public Base{ int c,d;public: Derived(int x,int y,int z,int m):Base(x,y){c=z;d=w;} void show(){cout<<c<<’,’<<d<<endl;}};int main(){ Base B1(50,50),*pb; Derived D1(10,20,30,40); pb=&D1; pb->show(); return 0;}
运行时输出的结果是()。
A.10,20
B.30,40
C.20,30
D.50,50
参考答案:A
解析:
本题考查的知识点是:多态性。在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。基类中的实函数也可以在 派生类中重定义,但重定义的函数仍然是实函数。在实函数的情况下,通过基类指针 (或引用)所调用的只能是基类的那个函数版本,无法调用到派生类中的重定义函数。本题中的show函数就是被重定义的实函数,所以通过基类指针pb所调用的是基类的版本,即输出a和b的值10,20。故应该选择A。