选择题
23. 如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制。
#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
【答案解析】 本题考查的知识点是:多态性。在C++中,一个基类指针(或引用)可以用于指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。基类中的实函数也可以在
派生类中重定义,但重定义的函数仍然是实函数。在实函数的情况下,通过基类指针 (或引用)所调用的只能是基类的那个函数版本,无法调用到派生类中的重定义函数。本题中的show函数就是被重定义的实函数,所以通过基类指针pb所调用的是基类的版本,即输出a和b的值10,20。故应该选择A。