请问:静态成员函数为什么只能访问静态成员?

sunboyljp 2006-11-02 09:10:42
静态成员函数怎样才能访问类的非静态成员?
...全文
1101 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
maxlcl 2006-11-03
  • 打赏
  • 举报
回复
静态成员函数访问非静态成员数据,当然需要有非静态成员数据了(这个谁还不知道)!
而有非静态成员数据是随此类的对象的产生而产生的,也就是说你必须有对象才可能有非静态成员数据,(而静态成员数据是不需要这个条件的!只要定义了类,就定义了静成员数据)所以,可以向上楼写的那样,定义形参为一个此类的对象,这样就可以访问此对象的非静态成员数据了!
lingjingqiu 2006-11-02
  • 打赏
  • 举报
回复
全静态的属性的对象,不叫Singleton模式,而是monostate模式
lqkofer 2006-11-02
  • 打赏
  • 举报
回复
静态成员不能与特定的对象相关联
只能通过作用域解析符和类名来调用
KenYuan2016 2006-11-02
  • 打赏
  • 举报
回复
1个类中的静态成员函数在多个实体中只有1个,而非静态成员函数是多个。
什么意图能告诉一下,我看到底什么情况下这样用。
xiao_potato 2006-11-02
  • 打赏
  • 举报
回复
class A
{
public:
static void func(A & obj);

用这个方法。
dfkoko 2006-11-02
  • 打赏
  • 举报
回复
关键是没有this指针
jixingzhong 2006-11-02
  • 打赏
  • 举报
回复
静态成员函数不需要实例就可以被访问,
也就是说只要有了这个类型就可以被使用了 ~~

但是在没有类型的时候,
非静态数据成员是不存在的,
如果方法访问了 非静态数据成员, 这里不就 OVER 了 !!
CAIZHU 2006-11-02
  • 打赏
  • 举报
回复
静态成员函数确切的说不属于某个类 属于全局的 就是还没产生类对象就已经存在了 一般是用类名加方法去访问,不提倡用对象加方法去访问,原因就是静态成员函数不属于某个类对象的
和全局变量有点相似 不同的就是它有个作用域的问题
taodm 2006-11-02
  • 打赏
  • 举报
回复
呃,没有简单办法。静态函数没有this指针,所以无法直接访问非静态成员。
只有把你的静态函数里加一个“本类对象的引用”的参数。
飞哥 2006-11-02
  • 打赏
  • 举报
回复
容易造成混乱
------------
态成员函数调用非静态成员变量
2006-09-14 18:09

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自变量这一行为。
lw1a2 2006-11-02
  • 打赏
  • 举报
回复
使用方法有问题
OOPhaisky 2006-11-02
  • 打赏
  • 举报
回复
静态成员函数怎样才能访问类的非静态成员?
-------------------------------------------------------------------------------
因为静态成员可以在不绑定到对象的前提下被调用,而在没有绑定到对象时,怎么可以访问到非静态成员呢?显然不能,所以静态成员函数只能访问类的静态成员。
lqkofer 2006-11-02
  • 打赏
  • 举报
回复
也就是说 非静态私有成员只能通过初始化对像,对象调用成员函数和友元函数来实现

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧