问题 单项选择题

有如下程序 #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<<funvalue( )<<Fun::i<<fun2.value( );

B.cout<<Fun::i<<funvalue()<<fun2.value( );

C.cout<<funvalue( )<<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。

填空题
单项选择题