有如下程序: #include<iostream> using namespace std; class GA{ public: virtual int f( ){return 1;} }; class GB:pu

admin2012-01-20  35

问题 有如下程序:    #include<iostream>    using namespace std;    class GA{    public:    virtual int f( ){return 1;}    };    class GB:public GA{    public:    virtual int f( ){return 2;}    };    void show(GA g){eout<<g.f( );}    void display(GA&g){cout<<g.f( );}    int main( ){    GA a;show(A) ;display(A) ;    GB b;show(B) ;display(B) ;    return 0;    }    程序的输出结果是

选项 A、1111
B、1211
C、1112
D、1212

答案C

解析 基类对象作为实参进行传递时,无论使用的是对象还是对象引用作为形参,都只能在该函数中调用基类成员函数,因此当GA a作为实参时,调用的只能是GA的成员函数。而当派生类对象作为实参传递时,函数的形参则要分情况而定:如果是普通的对象传递,则是值传递,那么在函数中也只能调用基类的成员函数;如果是对象引用作为形参,则是地址传递,这个时候函数就可以调用重载后的虚成员函数。
转载请注明原文地址:https://jikaoti.com/ti/5zL0FFFM
0

最新回复(0)