当前位置:首页 » 密码管理 » 静态成员函数访问静态成员变量

静态成员函数访问静态成员变量

发布时间: 2023-01-21 10:36:47

㈠ 静态成员函数不可以访问类中的成员变量

访问的意思就是读或者写,输出属于读出行为,自然不行。

静态成员函数不属于任何一个类对象,没有this指针,而非静态成员必须随类对象的产生而产生,所以静态成员函数"看不见"非静态成员,自然也就不能访问了

但是如果静态成员函数通过引用一个对象,是可以直接访问成员的,也体现了它成员函数的特权。

比如

classA
{
intm_i;
public:
staticvoidf()
{
m_i=666;//这是非法的,这个等价于this->m_i=666,而静态方法没有this
}
staticvoidf(A&a)
{
a.m_i=666;//这样就可以
}
};

㈡ 静态成员函数为什么只能访问静态成员

静态成员函数与静态变量不需要通过创建对象实例化,就可以进行调用。
而非静态变量就必须通过创建对象实例化,我们才能用这个对象调用它。
如果静态函数中出现非静态成员。
无创建对象的静态方法 中,没有满足调用非静态成员的条件。

㈢ 一个类的静态函数怎么调用这个类的成员变量,有方法吗

原因如下;
和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“∷”。
如 Box∷volume( ); 实际上也允许通过对象名调用静态成员函数,如 a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用a的类型而已。 静态成员函数的作用是为了能处理静态数据成员。 可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。
由此决定了静态成员函数不能访问本类中的非静态成员。 在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。假如在一个静态成员函数中有以下语句: cout<<height<<endl; //若height已声明为static,则引用本类中的静态成员,合法 cout<<width<<endl; //若width是非静态数据成员,不合法。但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如 cout<<a.width<<endl; //引用本类对象a中的非静态成员

㈣ 静态成员函数和非静态函数访问静态成员变量的区别

静态成员函数不能访问非静态成员变量,这是规定。
但是你可以换下解决问题的思路。线程的入口函数除了可以锁静态成员函数,也可是全局函数。
在全局函数里获取主窗口的句柄之后,接下来可以访问各种成员变量。
希望对你有帮助。

㈤ C++中引入静态成员函数有什么意义

静态成员函数的特点:

  1. 被类的所有的对象共有,不属于某一个对象。通过类名::就可以直接调用。

  2. 跟普通的成员函数比,没有隐藏的this指针作为参数。这一点可用于封装线程类。

  3. 静态成员函数只可以访问静态成员变量。

㈥ 什么叫静态函数成员,它有何特点

静态成员:不管这个类创建了多少个对象,静态成员在内存中只保留一份,静态成员用来解决同一个类中不同对象之间数据成员和函数的共享问题。

1、静态成员函数是用关键词static声明的成员函数,它属于整个类而并不属于类的某个对象。

类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。

由于静态函数是独立于类对象而存在的,因此静态成员函数中没有this指针。所以静态成员函数不可以直接访问类中的非静态成员,但是可以直接访问静态成员。

若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问。

㈦ 静态成员函数怎么使用成员数据

1、编译时候静态数据和成员函数就有了它的内存区,它不属于类的任何一个具体对象。所以,静态成员函数在编译时候就需要确定x及y的值,而那个时侯变量x,和y还没有创建,所以不可以访问非静态的数据成员。

2、一般情况下静态成员函数用于访问同一类中的静态数据成员或全局变量,而不访问非静态成员,如需访问非静态成员,需要将对象作为参数,通过对象名访问该对象的非静态成员。
3、我写了一个,您参考一下
#include <iostream>
using namespace std;

class test
{
public:
int x,y;
public:
test(int a=1 , int b=1) { x=a; y=b;}
static void a(test t) { t.x=t.x+t.y; }
void print() {cout<<"x="<<x<<endl; cout<<"y="<<y<<endl;}

};

void main()
{
test t;
t.print();
t.a(t);

t.print();

}

㈧ 为什么静态函数只能访问静态的数据成员

这个静态对应的不是动态,没有对应的词,普通的就叫“数据成员”和“函数成员”
静态的意思是跟这个类的对象实例没关系,是类范围的,一个类可以生成多个对象,但只有一份静态数据成员。
普通函数成员会隐式传递一个this指针,指向调用这个函数的对象;而静态函数成员不包括这个指针,所以在静态成员函数内不能使用非静态的数据成员和函数。

热点内容
排队叫号源码 发布:2025-08-27 16:28:50 浏览:852
幂数运算法则 发布:2025-08-27 16:25:37 浏览:694
为什么魔法觉醒服务器加载不出来 发布:2025-08-27 16:24:53 浏览:674
奕歌哪个配置最好看 发布:2025-08-27 16:12:39 浏览:602
美能达ftp扫描没有文件 发布:2025-08-27 15:54:42 浏览:159
昂科威plus应该买哪个配置 发布:2025-08-27 15:52:52 浏览:946
fdisklinux 发布:2025-08-27 15:52:48 浏览:948
ipad连接id服务器出错要怎么办 发布:2025-08-27 15:48:15 浏览:726
电脑室服务器吗 发布:2025-08-27 15:41:30 浏览:301
内网代理服务器地址怎么查 发布:2025-08-27 15:38:54 浏览:517