c++中类的静态数据成员

有时需要为某个类的所有对象分配一个单一的存储空间,这个存储空间只是被这个类的对象访问,其他人不能访问,那么这时静态的成员变量是有用的。例如下面用来统计一共创建了多少个对象的变量num

class classVar{
   static int num;
public:
    classVar(){num++;}
    ~classVar(){num--;}
    int getNum(){return num;}
};
int object::num = 0;
int main(){
   classVar var1;
   {
     classVar var2
     cout<<var2.getNum()<<endl;
   }
    cout<<var1.getNum()<<endl;

}

在类内部,static int num;算是静态成员变得声明,而其定义时在int object::num=0;处。如果我们在类内部static int num处直接赋值,编译器会报错,说只有常量才能在类内部初始化,即只有const  static int num=0;这种形式的才能在类内部初始化。

在vs2013中,const int num=0;在类内部也是正确的。

虽然const int num可以在类内部直接初始化,但请注意,有时候我们希望每一个对象的const int num的值不相同,那么此时const int num就应该在构造函数初始化列表中初始化。

还有一个要记住,数组(arrays),不是整形的静态常量,以及非静态的必须要在外部初始化

 1 class Values{
 2 static const int scSize=100;//静态常量,而且是整形数
 3 static const long scLong=100;
 4
 5 staitc const int scInts[];//数组不能在类内部初始化
 6 static const long scLongs[];
 7 static const float scTables[];
 8 static const char scLetters[];
 9
10
11 static int size;//非const的静态整形常量不能在类内部初始化
12
13
14 static const float scFloat;//静态常量,非integral不能在类内部初始化
15
16 };
时间: 2024-08-06 08:53:41

c++中类的静态数据成员的相关文章

转:C语言中的static变量和C++静态数据成员(static member)

转自:C语言中的static变量和C++静态数据成员(static member) C语言中static的变量:1).static局部变量        a.静态局部变量在函数内定义,生存期为整个程序运行期间,但作用域与自动变量相同,只能在定义该变量的函数内使用.退出该函数后, 尽管该变量还继续存在,但不能使用它.        b.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值.而对自动变量不赋初值,则其值是不定的.2).static全局变量        全局变量本身就是静

Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员

有关const成员.static成员.const static成员的初始化: 1.const成员:只能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外,且不加static修饰 3.const static成员:类只有唯一一份拷贝,且数值不能改变.因此,可以在类中声明处初始化,也可以像static在类外初始化 #include <iostream> using std::cout; using std::endl; class base { public: base(int

C++类中常量数据成员和静态数据成员初始化

常量数据成员初始化原则: 在每一个构造函数的初始化列表中初始化 静态数据成员初始化原则: 类内声明,类外初始化(因为它是属于类的,不能每构造一个对象就初始化一次) // test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> #include <vector> using namespace std; class A { public: A(int i):a(0) {} A():

c++:静态数据成员

一 . 静态数据成员 类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其它数据成员一样,静态数据成员也遵守public/protected/private访问规则.同时,静态成员还具有以下特点: 1. 静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义不应该被放在头文件中.静态数据成员初始化时不受private和protected访问限制. 注意:不要试图在头文件中定义静态数据成员.在大多数情况下,这样做会引起重复定义这样

静态数据成员与静态成员函数

静态属性不是类中每个对象拥有的,而是共有的.由于静态成员逃离了对象而存在的性质,所以该实体应该在所有对象产生之前产生,更适合的时机是在程序启动的时候做初始化.初始化时候不可重复上static,但是要加上类名空间.该实体在程序中的唯一性,要求他不可以和类的定义放在头文件中,但是它确实是类的成员,所以放在类实现中最合适.如下: //--------------------Student.h ---类定义的文件 class Student{ private: static int num; } //-

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

当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享.各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关.静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关. 静态数据成员的用途之一是统计有多少个对象实际存在. 静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的.也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一

static静态数据成员

类体中的数据成员的声明前加上static关键字,该数据成员就成为了该类的静态数据成员.和其他数据成员一样,静态数据成员也遵守public/protected/private访问规则.同时,静态数据成员还具有以下特点: 1.C++静态数据成员的定义. 静态数据成员实际上是类域中的全局变量.所以,静态数据成员的定义(初始化)不应该被放在头文件中. 其定义方式与全局变量相同.举例如下: xxx.h文件 1. class base{      2. private:      3. static con

指针指向类的静态数据成员

1. 代码 1 #include<iostream> 2 #include<stdio.h> 3 using namespace std; 4 class Point 5 { 6 public: 7 Point(int x=0,int y=0):x(x),y(y) 8 { 9 count++; 10 } 11 Point(const Point &p):x(p.x),y(p.y) 12 { 13 count++; 14 } 15 ~Point(){ count--;} 16

静态数据成员和函数

静态数据成员 类是类型而不是具体的数据对象,类的对象都是该类的实例,每个类对象都具有自己的数据成员,而且是相互独立,各占内存空间.然而,程序中往往需要让类的所有对象在类的范围内共享某个数据.声明为static的类成员能够在类的范围中共享,称之为静态成员. 一.全局变量与静态数据成员 希望在同类的多个对象之间实现数据共享,可以用静态的数据成员实现. 使用静态数据成员不会破坏隐藏的原则,即保证了安全性. 二.静态数据成员特点 在每个类中只有一个拷贝,由该类的所有对象共同维护和使用静态数据成员的值对每