静态构造函数一般是第一次访问一个累的时候由CLR自动调用的。 当然你也可以使用RumtimeHelper类的静态方法强制调用一个类的静态构造函数this类名函数名(参数)静态类中只能有静态成员!定义静态类,系统会默认一个静态的构造函数 你也可以自己定义,这个静态构造函数在你调用该类的任意一个成员函数时都会被自动调用!
静态成员函数可以直接引用该类的静态数据成员和静态成员函数,但不能直接引用非静态数据成员和非静态成员函数,否则编译报错。如果要引用,必须通过参数传递的方式得到对象名,然后再通过对象名引用
#include<iostream>
using namespace std;
class Myclass
{
private:
int m; // 非静态数据成员
static int n; // 静态数据成员
public:
Myclass(); // 构造函数
static int getn(Myclass a); // 静态成员函数
};
Myclass::Myclass()
{
m = 10;
}
int Myclass::getn(Myclass a)
{
cout << am << endl; // 通过类间接使用 非静态数据成员
return n; // 直接使用 静态数据成员
}
int Myclass::n = 100; // 静态数据成员初始化
void main()
{
Myclass app1;
cout << app1getn(app1) << endl; // 利用对象引用静态函数成员
cout << Myclass::getn(app1) << endl; // 利用类名引用静态函数成员
}
静态成员函数可以由类名方式或者类对象方式及对象的等价方式(如指针形式)调用;
非静态成员即普通成员函数,当然可以由类的对象进行调用了。
但是前提是访问权限允许,即必须是public的访问权限,因为相当于类外访问了。
我写几种办法你参考下:
一:可以把要用的参数通过void argslist 传递进线程函数
二:设置一个静态变量,静态变量可以指向你要调用对象的,然后在线程函数中直接调用
三:可以把类成员变量设置成静态的,这样就可以在线程函数中直接调用
看看你的代码int val=a是不可能调用的因为没有this指针,你可以采用我的第一个方案,传递进一个this指针,表明a是属于哪个对象的
//或者有没有办法在启动线程的时候使用类的成员函数?
不可能的否则你会产生大错的,因为线程函数是不会传递进this指针的,没有this指针成员函数不能工作,因此不可能把成员函数做线程函数的!但是因静态成员函数不需要this就可以工作,因此可以用做线程函数。(参见:《win32多线程程序设计》)
代码如下:
class test
{
private:
int a;
int b;
public:
test()
{
}
static void loop(void argslist )
{
test This=(test)argslist;
int val=This->a;
while(1)
{
Sleep(1000);
}
}
int StartThread()
{
return _beginthread(loop,0,(void)this);
}
};
int main()
{
test t= new test();
t->StartThread();
return 0;
}
这样解释不知道你是否明白!
还有不懂email我:quarke85@gmailcom
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)