从静态成员函数访问类成员(收藏)
来源:互联网 发布:mac 查看隐藏磁盘分区 编辑:程序博客网 时间:2024/04/28 14:38
C++会区分两种类型的成员函数:静态成员函数和非静态成员函数。这两者之间的一个重大区别是,静态成员函数不接受隐含的this自变量。所以,它就无法访问自己类的非静态成员。
在某些条件下,比如说在使用诸如pthread(它不支持类)此类的多线程库时,就必须使用静态的成员函数,因为其地址同C语言函数的地址兼容。这种铜限制就迫使程序员要利用各种解决办法才能够从静态成员函数访问到非静态数据成员。
第一个解决办法是声明类的所有数据成员都是静态的。运用这种方式的话,静态的成员函数就能够直接地访问它们,例如:
class Singleton
{
public:
static Singleton * instance();
private:
Singleton * p;
static Lock lock;
};
Singleton * Singleton::instance()
{
lock.getlock(); // fine, lock is static
if (!p)
p=new Singleton;
lock.unlock();
return p;
}
这种解决方法不适用于需要使用非静态数据成员的类。
访问非静态数据成员
将参照传递给需要考量的对象能够让静态的成员函数访问到对象的非静态数据:
class A
{
public:
static void func(A & obj);
intgetval() const; //non-static member function
private:
intval;
};
静态成员函数func()会使用参照obj来访问非静态成员val。
voidA::func(A & obj)
{
int n = obj.getval();
}
将一个参照或者指针作为静态成员函数的自变量传递,就是在模仿自动传递非静态成员函数里this自变量这一行为。
本文作者Danny Kalev 是一个系统分析家、软件工程师,在C++和面向对象设计方面有着14年的专业经验。
- 从静态成员函数访问类成员(收藏)
- 类中的静态成员函数访问非静态成员变量
- 静态成员函数访问非静态成员
- 静态成员函数不可以访问类中的成员变量
- MATLAB OOP记点东西2-成员函数访问成员变量(使用静态成员函数)
- 类的 静态成员 --- 静态成员变量 、 静态成员函数
- 静态成员函数 不能访问非静态成员函数
- 静态成员函数不能访问非静态成员函数
- 静态类成员函数
- C++中静态成员函数访问非静态成员变量
- C++中静态成员函数访问非静态成员变量
- 静态成员函数 间接 访问非静态数据成员
- C++中静态成员函数访问非静态成员变量
- c++中静态成员函数访问非静态成员变量
- C++中静态成员函数访问非静态成员变量
- C++中静态成员函数访问非静态成员变量
- 静态成员不能访问非晶态成员 静态函数同上
- C++的静态成员函数访问非静态成员变量
- 一些实用链接
- ★(转)J2ME学习笔记(七)
- 如何使用PartitionMagic 8.0汉化版(图文说明)(转载)
- ★(转)J2ME学习笔记(八)
- IT出路在哪里?
- 从静态成员函数访问类成员(收藏)
- ★(转)J2ME学习笔记(九)
- [Eclipse笔记]在SWT中有效的管理图形系统资源
- 2005.03.20 / 风和日丽, 看小说, 喝酒, ...
- How to be a good bf
- 在Web页上模拟(QQ)魔法表情
- VC 程序内嵌资源
- windows XP下Tomcat5.0.29+mysql4.0.23+jsp完整配置
- DataReader和DataSet