静态的函数可以直接用 ClassName::FunName 引用而不需要构造,私有的则必须构造后才能由类的内部函数引用,同时,静态的应该也是公共的。
其他的,等楼下的开讲……
同理,静态的成员变量也是公共的,不需要构建对象便已存在了.
静态变量就象自己的亲友,什么时候看都是一个人.函数可以一直保存原来的值.
私有变量象是汽车的旅客,下一次进去就换人了.每次进入函数都是初始化的值.
static变量属于类,即该类的所有对象都公用一个内存区。
比如你设计一个存款类,每个帐户为一个类对象,对每个帐户都有帐号,所以用普通变量。但对于存款利率,所有人都是一样的,只须共用一个,就用static类型。这样当你要改变利率的时候只要改一次,如果定义为非static类型你得对每个帐户都这样。
private类型用来做信息隐藏,把类外不须用的变量都定义为private类型可以防止误操作。
上面忘记加一句,static属于类,非static属于对象
楼上看C++ Primer很认真啊.
先谢谢大哥们的热情,但是小弟还是认为,从作用上讲,他们还是没有什么本质的区别。能不能举个例子,让我明白一下,各自的优缺点呢?
静态的不用new就能用类名加方法名访问
私有的必须new才能访问,并且只能是该类的成员函数访问,子类和该类的实例都不能访问。
如果 B 类继承于 A 类,那么 A 的 static 函数及成员在 B 中继续有效,但 A 类的 private 函数和成员就不能在 B 中引用。
建议楼主自己写代码试验一下,看书和实践都是需要互补的。
天啊还没有区别???
private的成员在对象构建之前是不存在的,也就是说只能象下面这样:
TYourObj obj;
obj.SetPrivMember(1);
或者
TYourObj *obj=new TYourObj;
TYourOjb->SetPrivMember(1);
在对象定义之前是不能操作其私有变量的,每个对象都有一份该变量的内存实现,
对于static成员而言,所有的对象共用一块内存实现,而且该内存在没有构建这个类的对象实例时已经存在了,就象全局变量一样.
如:
TYourObj::StaticMember=1;
与全局变量不同的是,static成员也可以是private的,这样就实现了信息隐藏.
static成员函数与普通成员函数也不一样,它没有隐含的this参数,所以只能访问static成员变量.