社区
C++ 语言
帖子详情
请问:静态成员函数为什么只能访问静态成员?
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
打赏
举报
回复
也就是说 非静态私有成员只能通过初始化对像,对象调用成员函数和友元函数来实现
C++57个入门知识点_43:
静态成员
函数
(static
静态成员
函数
声明,实现和调用;静态
函数
内部
只能
访问
静态成员
变量;本质是
静态成员
函数
没this指针;带类域的全局
函数
可直接利用类调用
静态成员
函数
)
学习完
静态成员
变量,趁热打铁,学习
静态成员
函数
,其基本性质及使用如下: //
静态成员
函数
//(1)在头文件的
函数
名前面加上关键字static //(2)
函数
内部不能
访问
普通成员变量,
只能
访问
普通成员变量 //(3)本质是
静态成员
函数
中没有this指针 //(4)
静态成员
函数
本质上就是带类域的全局
函数
,可以避免名称冲突的问题 //(5)在线程及回调
函数
中会用到
静态成员
函数
,用作线程的回调
函数
的声明 项目结构如下: 代码及注释如下: CIntreger.h: class CInteger {
【C++】
静态成员
函数
(
静态成员
函数
概念 |
静态成员
函数
声明 |
静态成员
函数
访问
|
静态成员
函数
只能
访问
静态成员
)
一、
静态成员
函数
简介 1、
静态成员
函数
概念 2、
静态成员
函数
声明 3、
静态成员
函数
访问
4、
静态成员
函数
只能
访问
静态成员
二、代码示例 -
静态成员
函数
静态成员
函数
为什么不能
访问
…
原文地址:
静态成员
函数
为什么不能
访问
本类中的非
静态成员
?作者:铿然一叶和静态数据成员一样,
静态成员
函数
是类的一部分,而不是对象的一部分。如果要在类外调用公用的
静态成员
函数
,要用类名和域运算符“∷”。如 Box∷volume( ); 实际上也允许通过对象名调用
静态成员
函数
,如 a.volume( ); 但这并不意味着此
函数
是属于对象a的,而只是用a的类型而已。
静态成员
函数
的作用是为了能处理静态数
静态成员
函数
与私有构造
函数
最近在学《Effective C++》和工厂模式,都遇到了这个问题:
静态成员
函数
创建了一个类对象,使用到了私有的构造
函数
。 觉得有点疑问,不是说
静态成员
函数
只能
访问
静态成员
函数
,全局变量和自身的
函数
形参吗,怎么可以
访问
私有的构造
函数
呢。 首先说明
静态成员
函数
为什么
只能
访问
静态成员
函数
,全局变量和自身的
函数
形参,因为
静态成员
函数
是与类相关联的,为所有类对象共享且只有一份,所以没有隐形的this指...
为什么
静态成员
函数
不能
访问
非
静态成员
?
1.
静态成员
函数
只属于类本身,随着类的加载而存在,不属于任何对象,是独立存在的 2.非
静态成员
当且仅当实例化对象之后才存在,
静态成员
函数
产生在前,非
静态成员
函数
产生在后,故不能
访问
3.内部
访问
静态成员
用self::,而
访问
非
静态成员
要用this指针,
静态成员
函数
没有this指针,故不能
访问
。 ...
C++ 语言
65,176
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章