虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数。而非虚函数不支持多态调用。有如下程序;    #include <iostream>    using namespace std

admin2017-10-17  30

问题 虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数。而非虚函数不支持多态调用。有如下程序;    #include <iostream>    using namespace std;    class Base    {    public:      virtual void f() {cout<<"f0+";}      void g() {cout<<"g0+";}    };    class Derived: public Base    {    public:      void f() {cout<<"f+";}      void g() {cout<<"g+";}    };     int main()    {      Derived d;      Base *p=&d;      P->f(); P->g();      return 0;    }运行时输出的结果是

选项 A、f+g+
B、f0+g+
C、f+g0+
D、f0+g0+

答案C

解析 本题考查的知识点是:虚函数与多态性。在题目的主函数中,首先声明了一个派生类对象d,然后声明了一个基类指针p指向它。接着通过该基类指针,分别调用了f()函数和g()函数。由于在基类Base的定义中,f()函数使用了virtual关键字,因此它是虚函数,即具有多态性,所以通过指针p调用的f()是派生类Derived中定义的 f()。而g()不是虚函数,所以通过指针p调用的是Base中定义的g()。由此可见,最终输出的结果是“f+g0+”。故本题应该选择C。
转载请注明原文地址:https://kaotiyun.com/show/cPAp777K
0

随机试题
最新回复(0)