有如下程序 #include<iostream> using nameSpace std; class base { public: vinual void f1() { cout<<"F1 Ba

admin2009-02-15  44

问题 有如下程序    #include<iostream>    using nameSpace std;    class base    {    public:      vinual void f1()     {       cout<<"F1 Base";    }    virtual void f2()       {       cout<<"F2Base";      }    };    class derive:public base    {      void f1()      {       cout<<"F1Derive";      }     void f2(int x)     {       cout<<"F2Derive";      }    };    int main()    {       base obj1,*p;       derive obj2;       p=&obj2;       p—>f1();       p—>f2();       return 0;    }    执行后的输出结果是

选项 A、F1Derive  F2Base
B、F1Derive  F2Derive
C、F1Base  F2Base
D、F1Base  F2Derive

答案1

解析 本题主要考查C++中虚函数机制及其继承过程中的要点。虚函数在基类中加关键字virtual声明,在派生类中重新定义;如果派生类没有覆盖虚函数,则程序执行中将会执行基类的虚函数版本。题目程序中,建立了基类base,其内函数void f1()和 voidf2()均被声明为虚函数,并在调用时会显式的发出声明。派生类derive利用public方式继承基类base,并覆盖其基类base中的虚函数f1();对于base中的虚函数f2(),由于派生类derive中的同名函数f2()中带有参数int x,因此被编译器认为是函数重载,而不作虚函数覆盖处理,因此实际上派生类derive中包含两个f2()函数,一个不带参数,调用时执行基类base中的f2()函数版本,一个带参数int x,调用时执行重载后的版本。题目main()函数中,定义了基类对象。obj1和基类指针*p,同时定义了派生类对象。obj2。p指向。obj2时:p—>f1()函数调用执行派生类覆盖后的版本,输出D1:p-> f2()由于不带参数,因此执行未经派生类覆盖的函数版本,即基类base中的f1()函数版本。
转载请注明原文地址:https://kaotiyun.com/show/W7kp777K
0

随机试题
最新回复(0)