类的静态数据成员初始化问题

1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化。初始化时使用作用域运算符来指出静态成员所属的类。但如果静态成员是整形const或枚举型const,则可以在类声明中初始化。

C++ primer plus P426-P427类静态成员的声明和初始化

//strnbad.h

class StringBad

{

private:

static int num_strings;

};

//strnbad.cpp

int StringBad::num_strings = 0;

不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存。请注意,初始化语句指出了类型,并使用了作用域运算符,但没有使用关键字static。初始化是在方法文件中,而不是在类声明文件中进行的,如果在头文件中,当头文件被包括在其他几个文件中时,将出现多个初始化副本,从而引发错误。

时间: 2024-08-05 07:05:00

类的静态数据成员初始化问题的相关文章

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变量和C++静态数据成员(static member)

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

c++:静态数据成员

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

static静态数据成员

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

静态数据成员和函数

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

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

一般情况下,如果有n个同类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干.但是有时人们希望有某一个或几个数据成员为所有对象所共有,这样可以实现数据共享. 可以使用全局变量来达到共享数据的目的.例如在一个程序文件中有多个函数,每一个函数都可以改变全局变量的值,全局变量的值为各函数共享.但是用全局变量的安全性得不到保证,由于在各处都可以自由地修改全局变量的值,很有可能偶然失误,全局变量的值就被修改,导致程序的失败.因此在实际工作中很少使用全局变量. 如果想在同类的

C++中的静态数据成员的作用与好处

静态成员如果有n个同类的对象,那么每一个对象都分别有自己的数据成员,不同对象的数据成员各自有值,互不相干.但是有时人们希望有某一个或几个数据成员为所有对象所共有.这样可以实现数据共享. 在前面介绍过全局变量能够实现数据共享. 如果在一个程序文件中有多个函数,在每一个函数中都可以改变全局变量的值,全局变量的值为各函数共享.但是用全局变量的安全性得不到保证,由于在各处都可以自由地修改全局变量的值,很有可能偶一失误,全局变量的值就被修改,导致程序的失败.因此在实际工作中很少使用全局变量. 如果想在同类

C++基础(静态数据成员和静态成员函数)

[1.静态成员] 1.静态数据成员与全局变量一样都是静态分配存储空间的,在编译时,就要为类的静态数据成员分配存储空间.但全局变量在程序中的任何位置都可以访问它,而静态数据成员受到访问权限的约束.必须是public权限时,才可能在类外进行访问. 2.静态数据成员的初始化 (1)*静态数据成员的初始化是在类的源文件(.cpp)中,而不是在类的头文件(.h)中进行的.这是因为类声明位于头文件中,程序可能将头文件包括在其他几个文件中.如果在头文件中进行初始化,将出现多个初始化语句副本,从而引发错误. A

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