有如下程序     #include <iostream>     using namespace std;     int i=1;     class Fun {     public:        static int i;        int 

admin2017-10-17  36

问题 有如下程序     #include <iostream>     using namespace std;     int i=1;     class Fun {     public:        static int i;        int value( ){ return i-l;}        int value( )const { return i+1;}     };     int Fun::i=2;     int main( ){        int i=3;        Fun funl;        const Fun fun2;         ___________        return 0;    }    若程序的输出结果是:    123    则程序中下划线处遗漏的语句是

选项 A、cout<<funl.value( )<<Fun::i<<fun2.value( );
B、cout<<Fun::i<<funl.value()<<fun2.value( );
C、cout<<funl.value( )<<fun2.value( )<<Fun::i;
D、cout<<fun2.value( )<<Fun::i<<fun1.value( );

答案A

解析 本题主要考查的是常成员函数。const关键字可以用于参与对重载函数的区分。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。当类中只有一个常成员函数时,一般对象也可以调用该常成员函数。由此可见,通过fun1调用value()函数时,是调用前一个,而通过fun2调用value()函数,是调用后一个。另外,value()函数中访问的i是类中定义的数据成员i,全局变量i在类中被“屏蔽”。观察4个选项不难发现,要输出的表达式来来去去只有3个:fun1.value()、fun2.value()和Fun::i。fun1.value()调用的是前一个value()函数,输出i-1,这里的i是Fun类的成员i,即等于2-1=1。fun2.value()调用的后一个value()函数,输出i+1=2+1=3。 Fun::i是通过类名直接访问类的静态数据成员i的值,即2。所以正确的输出顺序应该是:fun1.value(),Fun::i,fun2.value()。故应该选择A。
转载请注明原文地址:https://kaotiyun.com/show/uWAp777K
0

最新回复(0)