成员函数访问静态成员变量
❶ C++中引入静态成员函数有什么意义
静态成员函数的特点:
被类的所有的对象共有,不属于某一个对象。通过类名::就可以直接调用。
跟普通的成员函数比,没有隐藏的this指针作为参数。这一点可用于封装线程类。
静态成员函数只可以访问静态成员变量。
❷ 什么叫静态函数成员,它有何特点
静态成员:不管这个类创建了多少个对象,静态成员在内存中只保留一份,静态成员用来解决同一个类中不同对象之间数据成员和函数的共享问题。
1、静态成员函数是用关键词static声明的成员函数,它属于整个类而并不属于类的某个对象。
类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类的对象,所以只有在类的对象产生(创建类的实例)时才会分配内存,然后通过类的对象(实例)去访问。
由于静态函数是独立于类对象而存在的,因此静态成员函数中没有this指针。所以静态成员函数不可以直接访问类中的非静态成员,但是可以直接访问静态成员。
若要访问非静态成员时,必须通过参数传递的方式得到相应的对象,再通过对象来访问。
❸ C++类中静态对象成员的访问!
类其实是个模型。
而对象就是找个这个模型制作的实体。
比如,类是造车的图纸,对象就是找个图纸造出的汽车。
类的成员是分级别的:protect,public,private。
在类内部定义的函数可以访问任何一个变量,或者调用任何的类内部的函数,但是,如果被定义成private的话,对象是不能调用的,也就是对象只能调用定义为public的数据,如果你确实需要调用某个private的变量,你可以定义一个public的函数来返回这个变量,比如:
class
d
{
private:
int
a;
public:
int
getint(){return
a;}
......
}
这里你的对象不能调用a的,
也就是不能
int
b;
d
d;//假设已经写好了构造函数
b=d.a;//这是错误的,
但是你可以
b=d.getint();
这样就可以把a的值给b了。
所有的public的函数都可以通过
<对象>.<函数名>
的方式来调用
❹ 一个类的静态函数怎么调用这个类的成员变量,有方法吗
原因如下;
和静态数据成员一样,静态成员函数是类的一部分,而不是对象的一部分。如果要在类外调用公用的静态成员函数,要用类名和域运算符“∷”。
如 Box∷volume( ); 实际上也允许通过对象名调用静态成员函数,如 a.volume( ); 但这并不意味着此函数是属于对象a的,而只是用a的类型而已。 静态成员函数的作用是为了能处理静态数据成员。 可以说,静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针。
由此决定了静态成员函数不能访问本类中的非静态成员。 在C++程序中,静态成员函数主要用来访问静态数据成员,而不访问非静态成员。假如在一个静态成员函数中有以下语句: cout<<height<<endl; //若height已声明为static,则引用本类中的静态成员,合法 cout<<width<<endl; //若width是非静态数据成员,不合法。但是,并不是绝对不能引用本类中的非静态成员,只是不能进行默认访问,因为无法知道应该去找哪个对象。如果一定要引用本类的非静态成员,应该加对象名和成员运算符“.”。如 cout<<a.width<<endl; //引用本类对象a中的非静态成员
❺ c++中,类的普通成员函数通过this指针访问普通成员变量,那访问静态成员变量时是怎么实现的
静旁让态成员变量的位置是确定的,不要对象就可以直接访问。
比如下面代码稿李的两种引用方法是等价的:
classTest{
public:
staticintms_Data;
};
intmain(){
Test键启迟t;
std::cout<<t.ms_Data<<std::endl;
std::cout<<Test::ms_Data<<std::endl;
}
❻ 为什么静态函数只能访问静态的数据成员
这个静态对应的不是动态,没有对应的词,普通的就叫“数据成员”和“函数成员”
静态的意思是跟这个类的对象实例没关系,是类范围的,一个类可以生成多个对象,但只有一份静态数据成员。
普通函数成员会隐式传递一个this指针,指向调用这个函数的对象;而静态函数成员不包括这个指针,所以在静态成员函数内不能使用非静态的数据成员和函数。