#include<iostream.h>
class Point
{
public:
void init()
{
}
static void output()
{
}
};
void main()
{
Point po;
po.init();
po.output();
}
如果把主函数中代码改为
/*
Point po;
po.init();
po.output();
*/
Point::init();
Point::output();
就会出现以下错误:
error C2352: 'Point::init' : illegal call of non-static member function
因为对于init()函数来说,它是Point类中的一个内部成员,当要访问内部成员的时候,就必须先
构造一个Point类的一个对象,才能实现访问。就好像你播放歌曲(一个方法,函数),就需要一个MP3
但你没有购买MP3,仅是说要用它来播放,而你没有,就不能实现了。也就是说要有一个Point类的对象,就是
在内存中用了一个实实在在的存在一个空间后,才能调用你这个内在当中的一个方法。
然而为什么Point::output();能够实现呢?
output()其前加了一个static,作为一种静态的方法,它就不属于一个类的对象,而是属于类本身,进而加载后,已经为其
分配了代码区了,也就是说其并不属于某一具体的对象,只属于一个类。在一个对象没有
产生时,output()就已经有了代码区。
如果在output()中添加两个成员变量会怎样?
error C2597: illegal reference to data member 'Point::x' in a static member fu
error C2597: illegal reference to data member 'Point::y' in a static member function
在一个静态函数中去调用非静态成员变量,因为x, y 并没有分配作保的内存空间,赋值操作就不能成功。
但非静态的成员函数可以引用静态的
而静态成员函数只能引用静成员,可改x y 为静态成员!
总结:
谁能引用谁,应从内在模型中去考虑,也就是说不管你要采取什么样的操作
我们的程序代码都是在内存中的,这样才能去调用它,访问它,如其根本就没有存在 于
内存当中 ,也就产生一系列的操作了。