C++中类里static成员变量与普通的成员变量有什么不同?

如题所述

类中的static成员,只有一个实例。也就是所有的类的实例都用同一个变量。
如果这个变量是public的,那类的外部能够直接访问,方法是类名::变量名。

class A
{
public:
static int x;
int y;
};

A a1, a2; // 创建了两个A的实例
a1.x = 10; // 可以这样用,也可以 A::x = 10; 或 a2.x = 10; 效果完全一样,都对同一个变量操作
a1.y = 12; // 这是普通成员变量,a1.y 和 a2.y 是分属两个实例中的
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-05-29

C++中“类”的static成员,只有一个实例。也就是所有的类的实例都用同一个变量。如果这个变量是public的,那类的外部能够直接访问,方法是类名“变量名”。

代码中的实例变量、类变量、常量都属于成员变量,这与变量的修饰符有关系,也就是上面代码中的private、static、final等修饰符。

首先类的静态成员变量为类的全局变量,并不为类的对象所拥有。而类的普通成员变量通过类生成对象后是属于生成对象的变为此对象所特有,不能与其它生成的对象所共有。如下图所示,两个对象a,b的成员变量x并不是相同的。

静态成员变量需要在全局定义,普通成员变量是属于某个对象的,不需进行全局定义。访问类的静态成员变量可以通过如下形式,如类A中定义了静态成员变量x,形式为类名,变量名,类的静态成员变量在对象还没有产生前就已经存在了。

本回答被网友采纳
第2个回答  2018-02-13
类中的static成员,只有一个实例。也就是所有的类的实例都用同一个变量。
如果这个变量是public的,那类的外部能够直接访问,方法是类名::变量名。

class A
{
public:
static int x;
int y;
};

A a1, a2; // 创建了两个A的实例
a1.x = 10; // 可以这样用,也可以 A::x = 10; 或 a2.x = 10; 效果完全一样,都对同一个变量操作
a1.y = 12; // 这是普通成员变量,a1.y 和 a2.y 是分属两个实例中的
第3个回答  2018-03-10

类中的static成员,只有一个实例。也就是所有的类的实例都用同一个变量。
如果这个变量是public的,那类的外部能够直接访问,方法是类名::变量名。


class A


{


public:


static int x;


int y;


};



A a1, a2;        // 创建了两个A的实例


a1.x = 10;        // 可以这样用,也可以 A::x = 10; 或 a2.x = 10; 效果完全一样,都对同一个变量操作


a1.y = 12;        // 这是普通成员变量,a1.y 和 a2.y 是分属两个实例中的

请添加详细解释

类的静态成员和非静态成员有何区别?
3、生命周期不同 成员变量随着对象的出现而出现,随着对象的消失而消失。静态变量随着类的出现而出现,随着类的消失而消失。静态数据成员和普通数据成员区别较大,体现在下面几点:(1)普通数据成员属于类的一个具体的对象,只有对象被创建了,普通数据成员才会被分配内存。而静态数据成员属于整个类,即使没有...

C++ static静态成员函数详解
C++中的static静态成员函数提供了一种独特的功能,与普通成员函数有显著的区别。静态成员函数的关键特性在于它不依赖于对象实例,无需通过对象调用,且只能访问静态成员,如静态成员变量和静态成员函数。与普通成员函数的this指针不同,静态成员函数在编译时并不需要额外的this参数,这使得它们可以在对象创建之...

static函数与普通函数有什么区别
有两种,一种是类中的成员(C++的概念,既然你问c这里就不赘述了),另外一种就是文件作用域的静态变量,有文件作用域的静态变量只能在包含它的.c文件中使用,如果是声明在头文件中的静态变量,

static函数和普通函数区别
我估计不是很明白static那么我给你从C程序开始讲起:C程序一直由下列部分组成:1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令;2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。3)非初始化数据段(bss段)——在...

C++ 中static 和final的区别是什么
1、在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在类加载的时候被创建并初始化(只被创建初始化一次),对于该类的所有对象来说,staitic成员变量只有一份。2、用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非静态的...

C++头文件中static 和 inline修饰函数或变量的区别
在类的上下文,非const静态成员变量的初始化方式在C++17前后有所不同:C++17允许在类内直接使用static inline进行初始化;C++17之前则必须在类外完成初始化。对于C++17之前的类内静态变量,若在头文件中初始化,则可能会导致重定义错误;应考虑在类的实现文件中进行初始化操作。C++17引入了对类静态成员...

c++中类的对象和成员变量的区别
C语言的变量可以分成两种级别:全局变量和局部变量 全局变量,在该变量之后定义的函数都可以访问 局部变量,只能在定义的函数中访问 而C++中多出了成员变量,成员变量通常是私有。成员变量依附于对象存在,有了对象,成员变量才有内存 而成员变量的可以被本类的所有成员函数直接访问的。

静态变量和动态变量,成员变量
静态成员变量属于类共享,只定义一次,所有对象共享同一副本。静态成员函数属于类,不依赖于对象实例调用,仅能访问类的静态成员变量。常量通过 const 标记,一旦定义就不能修改值。在 C++ 中,const 标记可以用于变量、指针、函数参数或类的成员函数。常量可以初始化,但只能在定义时初始化,且在运行时不...

c++静态类和非静态类的区别
作用域不同,内存分配不同。1、作用域不同:c加加静态类的成员变量和成员函数的作用域是整个程序中可见的,而非静态类的成员变量和成员函数的作用域是类的内部。2、内存分配:c加加静态类的成员变量和成员函数在程序开始运行时就被分配了内存,而非静态类的成员变量和成员函数则是在对象创建时才分配...

什么是 static 版文件或者软件?
static C++中的static C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。 一、面向过程设计中的static 1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态...

相似回答