首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++静态成员变量 ( 静态成员变量概念 | 静态成员变量声明 | 静态成员变量初始化 | 静态成员变量访问 | 静态成员变量生命周期 )

一、静态成员变量概念 1、静态成员变量引入 在 C++ 类中 , 静态成员变量 又称为 静态属性 ; 静态成员归属 : 静态成员变量 是特殊成员变量 , 是 类所有的 成员 , 而不是对象所有的成员...; 静态成员变量 提供了 同类对象共享机制 : 同一个类 所有实例对象 , 都可以共享访问 想通 静态成员变量实例 ; 2、静态成员变量声明 静态成员变量 声明 方式 : 使用 static 关键字...// 身高 // 在类内部定义静态成员 static int number; }; 3、静态成员变量初始化 静态成员变量 初始化 : 静态成员变量 是在 类使用时 , 在类外部 进行 初始化 ;...Student 类 静态成员 成员变量 初始化有两种方式 : 声明 并 进行初始化 : 声明类内部已经定义 静态成员变量 , 然后进行初始化 ; // 在类外部初始化静态成员变量 int Student...<< "s.number = " << s.number << endl; 5、<em>静态</em><em>成员</em>变量生命周期 <em>静态</em><em>成员</em>变量 <em>的</em> 生命周期 就是 程序<em>的</em>声明周期 ; <em>静态</em><em>成员</em>变量 在 应用启动时 <em>初始化</em> , 在

31120

C++静态成员

而在C++中,static除了这样作用之外,还多了一项非常重要功能——定义类属性和行为,这是基于对象程序设计一个不可或缺要素。...静态数据必须在类外初始化(const型数据除外),未初始化的话不能访问。这个跟C语言中静态变量不同(静态变量未初始化的话会被自动初始化为0,还记得吗?)...,上述count可以在类外初始化,像这样: int kitty::count = 0; 类外初始化时,不能指定static关键字(static修饰静态成员只能放在类内部),另外还需加上域解析符(kitty...使用域解析符来引用静态成员,比如: kitty::count; kitty::getCount(); 使用类对象来引用静态成员,比如: kitty cuteCat; cuteCat.count; cuteCat.getCount...静态成员内在涵义就是:他们是属于整个类属性和行为,而不依存于任何一个具体个体。

73940
您找到你想要的搜索结果了吗?
是的
没有找到

C++ 静态数据成员静态成员函数

int minute; int sec; }; 2.静态数据成员意义 C++为什么要进入静态数据成员这个概念,或者它有什么好处。...(2)静态数据成员初始化静态数据成员在类内定义,而不能在类内完成初始化,直接赋值和利用构造函数初始化都不可以。...那么应该如何完成静态数据成员初始化静态数据成员初始化只能在类体外完成。...(); private: static int hour; //定义hour为静态数据成员 int minute; int sec; }; 2.静态成员函数意义 静态成员函数可以使一切不需要实例化就可以有确定行为方式函数使用起来更加方便...(2)静态成员函数访问: 静态成员函数只能访问本类中静态数据成员。 非静态成员函数可以访问本类中静态数据成员与非静态数据成员

1.4K50

C++静态数据成员静态成员函数

我们需要一个成员为所有对象所公有,而且在需要更新这个公有属性时候只需修改一次。 因此,C++提供了静态数据成员来描述类对象相同属性。...在类定义时候非静态数据成员是不分配内存,只有在创建类对象时候才分配内存,但静态数据成员是要分配内存,因为它是属于类,只有一块内存,所以要初始化它,而且不能在类声明中初始化,必须要在类外初始化...如果你不初始化静态数据成员,系统会报编译错误。...首先,可能你在做题时候,题目要求你使用静态成员函数完成任务…… 开个玩笑啦…… 静态成员函数没有this指针,因为它在类创建时候就存在了,在没有创建类对象时候就已经存在静态成员函数,而普通函数必须在类对象被创建时候才能被使用...简而言之,静态成员函数是服务于类,而不是某个类对象,它方便在于不需要定义类对象就能使用

14730

C++静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊函数 , 该函数属于类 , 而不是属于 类实例对象 ; 静态成员函数调用不依赖于对象..., 也不能在 静态成员函数 中访问 普通 成员变量 和 成员函数 ; 2、静态成员函数声明 静态成员函数声明 : 使用 static 关键字 修饰 成员函数 , 就可以将 普通成员函数 转为 静态成员函数...进行 ; 在 Student 类中定义静态成员函数 , 使用 static 关键字修饰函数 ; 注意 : 不要在 静态函数中 访问 非静态成员 , 否则会报错 " 对非静态成员“Student::m_age...//m_age = 10; cout << "静态成员函数被调用 : number = " << number << endl; } 访问 类 静态成员函数 时 , 可以使用 类名:: 调用...number; }; // 在类外部初始化静态成员变量 int Student::number = 1; int main() { // I.

27320

确保初始化静态成员

在开发时我们习惯在创将某个实例之前先把静态成员变量初始化好,具体做法是通过静态初始化语句以及静态构造函数。...静态构造函数在 c# 是比较特殊函数,它会在第一次访问所在类定义其他方法、变量和属性之前执行,一般我们用它来初始化静态变量、实现单例模式以及执行其他一些需要在访问其他必要工作。...如果静态字段初始化工作较为复杂或者是初始化开销很大的话,那么我们可以使用 Lazy 机制将初始化工作推迟在第一次访问该字段时候再去执行。...在 C# 中比较常见静态初始化语句是实现单例模式,开发人员可以将实例级别的构造函数设为 private ,并添加静态初始化语句并在其中调用这私有的实力构造函数。...,甚至有时会比基类静态构造函数执行更早。

83510

C++静态成员

静态变量 我们可以使用 static 关键字来把类成员定义为静态。当我们声明类成员静态时,这意味着无论创建多少个类对象,静态成员都只有一个副本。 静态成员在类所有对象中是共享。...我们不能把静态成员初始化放置在类定义中,但是可以在类外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,如下面的实例所示。...,而是属于该类; ⑤、静态数据成员需要在类外进行声明或声明并初始化,否则在使用时候会报链接错误; ⑥、类静态成员在定义时候需要加 static,在类外声明时候不需要加 static 关键字...; ⑦、不能用构造函数参数初始化形式对静态成员进行初始化操作; ⑧、静态数据成员既可以通过对象名引用,也可以通过类名来直接引用,具体代码见视频教程!...静态成员函数只能访问静态成员数据、其他静态成员函数和类外部其他函数。 静态成员函数有一个类范围,他们不能访问类 this 指针。您可以使用静态成员函数来判断类某些对象是否已被创建。

17130

C++静态成员变量和静态成员函数小结

静态数据成员实际上是类域中全局变量。所以,静态数据成员需要在类外定义(初始化),而不应该被放在类声明中。 原因是类声明中只是描述如果分配内存并不会真正分配内存,而定义是一定要分配内存。...举例如下: xxx.h文件 class base{ private: static const int _i;//声明,标准c++支持有序类型在类体中初始化,但vc6不支持。...}; xxx.cpp文件 const int base::_i=10;//定义(初始化)时不受private和protected访问限制. 注:不要试图在头文件中定义(初始化)静态数据成员。...但是对于这条规则比较例外静态数据成员为整型或者枚举型const时候可以在类声明中进行初始化。  2.静态数据成员被类所有对象所共享,包括该类派生类对象。...★这个特性,我不知道是属于标准c++特性,还是vc6自己特性。 静态数据成员值在const成员函数中可以被合法改变。

1.8K50

静态成员函数访问非静态数据成员C++

初始化: 类型 类名 :: 静态数据成员 = 初始化值 ; 详解:静态数据成员必须在类外初始化,不可在类体内,因为:构造函数中,如果可以,则每次建立对象,都会对静态数据成员值进行修改,这违背静态数据成员使用目的...静态成员函数名 (实参表) ; 注意 类外定义静态成员函数时,定义格式和普通成员函数定义格式相同,不再使用static修饰; 使用对象名和成员运算符(.)调用成员函数时,并非该函数属于某一对象,只是类与对象间桥梁...,为了能处理静态数据成员静态成员函数不能默认引用本类非静态数据成员原因: 当调用一个对象静态成员函数时,系统会将该对象起始地址赋予成员函数this指针。...< y << endl; //静态成员函数处理静态数据成员 } int Point::y = 0; //静态数据成员初始化 int main...若必须要访问,则有两种方式,且一般使用第二种居多。 对象名 . 非静态成员 ; 类名 :: 非静态成员 ; 故:实例化对象即可完成对非静态数据成员访问

1.1K20

C++】类与对象—— 初始化列表 、static 静态成员

所以一般建议养成使用初始化列表习惯,这样可以避免某些意想不到编译错误,特别是遇到类包含构造函数初始值成员时。 初始化顺序: 显然在构造函数中每个成员只能出现一次。...尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化 成员变量在类中声明次序就是其在初始化列表中初始化顺序,与其在初始化列表中先后次序无关。...静态成员变量一定要在类外进行初始化 2.2 声明成员变量 我们通过在成员声明之前加入关键字 static 就可以创建,和其他成员一样,静态成员也是可以被 public 或 private。...作为结果,静态成员函数不能声明成const 而且我们也不能在static 函数体内使用this指针。这一限制及适用于this显式使用,也对调用非静态成员隐式使用有效。...2.3 使用静态成员 使用时我们通过作用域运算符直接访问静态成员。 虽然静态成员不属于类某个对象,但是我们依然可以使用对象、引用、或者指针来访问静态成员

20910

C++静态成员

C++在类中提供了静态成员。这是非常有必要,因为我们程序设计者是需要这样特性。 静态数据成员 对于非静态数据成员,每个类对象都有自己拷贝。而静态数据成员被当作是类成员。...C++提供了这样得方法,但是该方法得使用比较特殊。静态数据成员必须在类外初始化一下,否则会导致编译错误。 注:不要试图在头文件中定义(初始化)静态数据成员。...静态函数成员 静态函数成员也是属于整个类,无需对象我们也能访问它。这样在大多数情况下可能会出错(比如你在没有创建对象时候,访问了一个非静态数据成员),因此C++静态成员函数做了限制。...它只能操作类静态数据成员和类静态函数成员。类普通函数可以访问它们。 这种函数也很有必要,因为他能在我们不创建对象情况下,让我们知道类静态数据成员是什么样子。...MyClass(int a) { this->a = a; this->c = 33; } MyClass::~MyClass() { } int MyClass::c = 100; //静态数据成员必须这样初始化一下

45120

C++C++静态成员

静态成员包括静态数据成员静态成员函数!...一种比较简单方法就是,我们可以维护一组全局变量,每个全局变量都会记录某个兵种当前数量。 但是使用全局变量会引入比较多问题,不推荐使用! 1.使用全局变量时候,安全性无法得到保证。...另一种方法就是使用静态数据成员,因为静态数据成员是各个对象所共有的,不属于某个具体对象。 静态数据成员为各个对象共有,不属于某个具体对象,所有对象都可以对它进行引用,都可以读取和修改。...static int m_nNum; 定义之后不要忘记在cpp中初始化这个静态成员变量。...定义类时就为静态数据成员分配空间,不随对象建立而分配空间。 static成员变量不能在类内进行初始化

52810

C++静态成员

静态成员就是不管这个类是否有已实例化对象存在,这个成员都一直存在。 也就是说,静态成员是绑定在类上,而不是绑定在对象上。 声明静态成员方式就是在函数前加入static关键字。...静态成员通常适用于当一个类所有对象之间需要共享同一份数据时候,这样子能节省空间,提高效率。 在C++11之前,只有int或者enum类型能在声明时候被初始化。...(但是C++11及以后则不存在这个问题) 如何访问静态数据成员? 对于public静态数据成员,我们只需要用类似于 Test::data 这样子格式来访问即可。...对于private或者protected静态数据成员,我们需要为他们创建一个静态成员函数来返回他们值。同样静态成员函数是绑定在类上而不是在对象上。...,他们变量作用域只是这个块之中,当这一块结束之后,里面的数据成员也就被清理了。

63230

C++ static静态成员

输出结果: 2 4 01 静态成员变量 普通成员变量每个对象有各自一份,而静态成员变量一共就一份,为所有对象共享。...因此静态成员变量和静态成员函数不需要通过对象就能访问,因为他是共享。...静态成员变量本质上是全局变量,哪怕一个对象都不存在,类静态成员变量也存在; 2. 静态成员函数本质上是全局函数; 3....设置静态成员这种机制目的是将和某些紧密相关全局变量和函数写在类里面,看上去像是一个整体,易于维护和理解; 4. 在静态成员函数中,不能访问非静态成员变量,也不能调用非静态成员函数; 5....静态成员必须在定义类文件中对静态成员变量进行初始化,否则会编译出错。?

56560

C++深拷贝与浅拷贝,初始化列表,对象成员静态成员相关分析

} //如果不利用深拷贝在堆区创建新内存,会导致浅拷贝带来重复释放堆区问题: p1在进行有参初始化时,在堆区申请了一个空间,p1height指针就指向这个空间,p2在进行拷贝初始化使用是编译器提供浅拷贝...如果不利用深拷贝在堆区创建新内存,会导致浅拷贝带来重复释放堆区问题: p1在进行有参初始化时,在堆区申请了一个空间,p1height指针就指向这个空间,p2在进行拷贝初始化使用是编译器提供浅拷贝...初始化列表 作用: C++提供了初始化列表语法,用来初始化属性 语法:构造函数():属性1(值1),属性2(值2)... {} 示例: class Person { public: ////传统方式初始化...C++类中成员可以是另一个类对象,我们称该成员为 对象成员 例如: class A {} class B { A a; } B类中有对象A作为成员,A为对象成员 那么当创建B对象时,A与B...在编译阶段分配内存 类内声明,类外初始化 静态成员函数 所有对象共享同一个函数 静态成员函数只能访问静态成员变量 示例1 :静态成员变量 class Person { public: static

82851

C++静态成员变量和静态成员函数学习总结

下面我们来做一个小程序需求来慢慢引出静态成员变量: 统计在程序运行期间某个类对象数目 要保证该程序安全性(不能使用全局变量) 随时可以获取当前对象数目 代码版本一: #include <stdio.h...1、c++中可以定义静态成员变量: 静态成员变量属于整个类所有 静态成员变量生命期不依赖于任何对象(上面的程序,每个对象成员变量是独立,所以打印出mCount值分别为1) 可以通过类名直接访问公有静态成员变量...:   static int mCount; public:   Test()//不要使用初始化列表进行初始化   {     mCount++;   }   ~Test()   {      --mCount.../a.out mCount=3 mCount=3 mCount=3 说明,这里静态成员变量不能使用初始化列表去初始化,这里要明白上面说那句话:静态成员变量需要在类外单独分配空间,换句话说,就是只有在类外部重新定义静态成员变量才可以存储到静态存储区...1、在C++中可以定义静态成员函数: 静态成员函数是类中特殊成员函数 静态成员函数属于整个类所有 可以通过类名直接访问公有静态成员函数 可以通过对象名访问公有静态成员函数 2、静态成员函数定义: 直接通过

56230

Java中类初始化过程:(静态成员变量,静态代码块,普通成员变量,代码块初始化顺序)

初始化过程是这样: 1.首先,初始化父类中静态成员变量和静态代码块,按照在程序中出现顺序初始化; 2.然后,初始化子类中静态成员变量和静态代码块,按照在程序中出现顺序初始化; 3.其次,...初始化父类普通成员变量和代码块,在执行父类构造方法; 4.最后,初始化子类普通成员变量和代码块,在执行子类构造方法; 类加载顺序: 父类静态成员变量、静态块>子类静态成员变量、 静态块>...父类普通成员变量、非静态块>父类构造函数>子类 普通成员变量、非静态块>子类构造函数 静态代码块:随着类加载而执行,而且只执行一次 非静态代码块:每创建一个对象,就执行一次非静态代码块 关于各个成员简介

29030

C++静态成员与友元

如果将其放在全局变量中,那么 C++ 封装性将受到影响,静态成员案例见以下程序片段 class student{ public: student(string nName =...stuNum--; } 然后在 C++ 工程文件中包含 student.cpp 和 main()函数所在 cpp 文件即可,这是静态数据成员标准使用方法。...静态成员函数 同样静态成员函数也属于类,不与类任何一个对象相联系,所以在调用静态成员函数时,并不需要使用对象来进行引导,标准方法为:类名::静态成员函数名(); 下面程序片段演示了静态成员函数调用方法...(){ student s1;//初始化对象s1 cout<<s1.stuNumber()<<endl;//合法,使用对象引用静态成员函数 cout<<student::stuNumber...()<<endl;//合法,使用类名引导静态成员函数(标准用法) return 0; } 静态成员函数属于类,不与该类任何一个对象相联系,那显然也不能对非静态成员进行默认访问,因为非静态成员与对象相关联

64810
领券