静态成员函数读取非静态变量的方法探讨
2008-11-05 10:28
344 查看
一般情况下,类的静态函数是无法读取非静态成员变量的,当然windows下,什么问题都有办法,可以通过其它的方法来实现静态函数对非静态成员变量的读取。
方法一:
class A
{
public:
int Fun1(void);
int mem;
void fun1();
static int Fun2(A& a);
};
static int A::Fun2(const A&a)
{
a.Fun1();
a.mem=1;
}
void A::fun1()
{
Func2(this);
}
通过fun1()函数将对象指针传递给Func2。
但这种方法有一个前提,就是静态函数的参数可以是类引用,那如果参数不能是类引用或类指针呢?那就可以再绕一下,如下,
方法2:
class A
{
public:
static A& refA;
int Fun1(void);
int mem;
void fun1();
static int Fun2(...);
};
A::fun1()
{
refA=this;
}
然后,
A::Fun2(...)
{
refA.mem=10;
}
当然这些方法也有缺陷,那就是一定得在类实例化后才可以传递this指针。
根据我的试验,上面几种方法对应静态回调函数不适合(函数的参数已规定,无法修改),于是我在类的实现中添加了一个全局类指针,A *pa;然后在初始化中,将this指针赋给pa,这样回调函数就可以顺利的读取全局变量pa里的数据了。
方法一:
class A
{
public:
int Fun1(void);
int mem;
void fun1();
static int Fun2(A& a);
};
static int A::Fun2(const A&a)
{
a.Fun1();
a.mem=1;
}
void A::fun1()
{
Func2(this);
}
通过fun1()函数将对象指针传递给Func2。
但这种方法有一个前提,就是静态函数的参数可以是类引用,那如果参数不能是类引用或类指针呢?那就可以再绕一下,如下,
方法2:
class A
{
public:
static A& refA;
int Fun1(void);
int mem;
void fun1();
static int Fun2(...);
};
A::fun1()
{
refA=this;
}
然后,
A::Fun2(...)
{
refA.mem=10;
}
当然这些方法也有缺陷,那就是一定得在类实例化后才可以传递this指针。
根据我的试验,上面几种方法对应静态回调函数不适合(函数的参数已规定,无法修改),于是我在类的实现中添加了一个全局类指针,A *pa;然后在初始化中,将this指针赋给pa,这样回调函数就可以顺利的读取全局变量pa里的数据了。
相关文章推荐
- C++静态函数中调用非静态成员函数或变量(方法1静态变量的方法)
- Objective-C 类,实例成员,静态变量,对象方法,类方法(静态方法),对象,
- C++静态成员函数访问非静态成员的几种方法
- C++静态成员函数访问非静态成员变量的方法
- C++ 类中的静态变量和静态成员函数(转)
- Objective-C 类,实例成员,静态变量,对象方法,类方法(静态方法),对象
- 关于JAVA继承类的静态变量、成员变量、父子类构造方法调用顺序的探讨
- C++静态成员函数访问非静态成员的几种方法
- 静态成员函数和静态成员方法
- 静态变量与静态成员函数
- C++ 类中的静态变量和静态成员函数
- C++ 类中的静态变量和静态成员函数
- 面向对象——概念(成员变量、静态变量、成员方法、静态方法、垃圾回收机制、重载、包)
- 关于JAVA继承类的静态变量、成员变量、父子类构造方法调用顺序的探讨 .
- C++静态成员函数访问非静态成员的几种方法
- C++静态成员函数访问非静态成员的几种方法
- 类的静态成员变量和静态成员函数的使用方法一
- 类中静态的方法、成员函数只能访问静态的数据成员或者静态的方法
- C++静态成员函数访问非静态成员的几种方法
- objective-c 类和对象中静态数据成员和静态成员函数(类方法)详解