问题 单项选择题

如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制。
#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。

单项选择题 A1/A2型题
单项选择题