静态成员问题

#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 为静态成员!



总结:

谁能引用谁,应从内在模型中去考虑,也就是说不管你要采取什么样的操作

我们的程序代码都是在内存中的,这样才能去调用它,访问它,如其根本就没有存在 于

内存当中 ,也就产生一系列的操作了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值