如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制。#include<iostream>using namespace std;class Base{    int a,b;public

admin2017-10-17  32

问题 如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制。#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。
转载请注明原文地址:https://kaotiyun.com/show/dWAp777K
0

最新回复(0)