请教在C++中static方法的用法有什么特别之处吗?
我对static方法的作用不太了解,谢谢! 问题点数:20、回复次数:11Top
1 楼nothingneed(一品猪头)回复于 2001-12-14 10:36:28 得分 5
当你想在任何对象创建前,使用static变量,就必须用static方法.
但static方法没有this指针,所以无法存取非static变量.Top
2 楼lovelyeyes(七七)回复于 2001-12-14 11:58:10 得分 0
非static变量必须用this指针存取吗?Top
3 楼heartlove(吴竹)回复于 2001-12-14 12:35:52 得分 5
不是必须,是编译器自动给每个对象一个this指针以指向自身Top
4 楼findcaiyzh(秋心)回复于 2001-12-14 12:39:06 得分 0
不依靠类实例
class A
{
static int getmember(){}
};
void main(void)
{
int i = A:getmember();
}
static 方法只能操作类中的静态变量。Top
5 楼lovelyeyes(七七)回复于 2001-12-14 13:18:18 得分 0
C++中有没有super指针?this指针的用法是?Top
6 楼coppermine(coppermine)回复于 2001-12-14 14:13:07 得分 10
类的静态成员函数是和类相联系的,而不是和类的具体对象相联系的,即使一个类没有任何具体对象,也能调用类的静态成员函数.
类的静态成员函数的主要特征是没有this指针,这就导致了它
(1)不能"直接"存取类的非静态成员变量。不能直接存取是因为不能直接对对象的非静态成员变量寻址。也就是说是可以间接进行对象的非静态成员变量的存取的。
(2)不能被声明为virtual
一般的非成员静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。Top
7 楼cmzxlinhai(老头)回复于 2001-12-14 15:13:41 得分 0
关于static 变量方面的声明举个例子:
void function(void)
{
static int a=10;
a++;
}
当第一次调用function()时 a被初始化为10
当第二次调用function()时 a为刚才运算后保留的值11
被声明为static的变量某种意义上说有点象全局变量的特性Top
8 楼lovelyeyes(七七)回复于 2001-12-14 16:00:09 得分 0
coppermine说的可以间接进行对象的非静态成员变量的存取是怎么一回事?Top
9 楼coppermine(coppermine)回复于 2001-12-14 20:04:43 得分 0
举个例子,
#include <iostream.h>
class temp
{
public:
temp(long x=10, long y=10) : m_x(x), m_y(y) {}
long m_x, m_y;
static long addxandy(temp *pthis) { if(pthis==0) return 0; return pthis->m_x+pthis->m_y; }
};Top
10 楼coppermine(coppermine)回复于 2001-12-14 20:07:19 得分 0
void main()
{
temp tmp1;
cout<<temp::addxandy(&tmp1);
}Top
11 楼andy_lau(天行键,君子当自强不息!)回复于 2001-12-15 11:11:49 得分 0
类中的static成员(不管是成员函数还是成员变量)都是属于这个类的,而不是属于某个对象(类的某个实例)。此类的某个对象改变了static成员,也将影响到其它此类的各个对象。Top




