c++再次请高手解答一下小问题,谢谢。

来源:百度知道 编辑:UC知道 时间:2024/05/25 07:03:23
#include<iostream>
using namespace std;
int i=1;
class Fun{
public:
static int i;
int value(){return i-1;}
int value()const{return i+1;}
};
int Fun::i=2;
main(){

Fun fun1;
const Fun fun2;
fun1.value();
fun2.value();

}
请教一下,这两个对象调用的函数名字一样,那么调用的结果各是什么?为什么?谢谢。

楼上的说得有个错误,,,,
1.首先肯定您对函数的重载的解释是正确的,但是我还想补充说明下,static也是属于“函数类型”的一部分的。这样会较容易理解的吧o(∩_∩)o...
2.“Fun::i=2 即代表每个Fun定义的对象的i值皆为2 ”
这句话是错误的: Fun::i=2 是说明所有 的此类的对象公用这一个“i”任何对象都可以使用并且,更改.但是由于你的 语句中没有修改故,看不出这一点。
你把 语句改为return i++ 和i--就能看出我说的是对的了o(∩_∩)o...
这样能更全面了解下。
o(∩_∩)o...

成员函数value()有非const和const之分
定义的fun1为非const变量
定义的fun2为const变量
所以fun1.value调用int value(){return i-1;}
fun2.value调用int value()const{return i+1;}
如果最后改成
cout<<fun1.value()<<endl;
cout<<fun2.value();
则结果为
1 因为(2-1)=1
3 因为2+1=3
一开始定义Fun::i=2
即代表每个Fun定义的对象的i值皆为2

这个程序有3点需要注意:
1、变量的域。在类前面定义的全局变量i和类里面定义的成员变量i的域是不同的。
2、static用在类成员变量上意味着这个变量是一个静态变量,只能初始化一次,且这个类的所有对象对这个变量来说是共用的关系,即一个对象改变了i的值,其他所有对象的i值都跟着变化。
3、const对象调用的方法也必须const方法。

vlaue函数被重载,所以fun2实际调用的函数为value(){rutrun i+1;}