类里的const
成员初始化:
在一个类里建立一个 const
时,不能给他初值。
class Test{
public:
Test():i(100){}
private:
const int i=100;//error!!!
};
//或者通过这样的方式来进行初始化
Test::Test():i(100){}
类里的 static
成员初始化:
类中的static
变量是属于类的,不属于某个对象,它在整个程序的运行过程中只有一个副本,因此不能在定义对象时 对变量进行初始化,就是不能用构造函数进行初始化,其正确的初始化方法是:
数据类型 类名::静态数据成员名=值;
class Test{
public:
Test();
private:
static int i;
};
int Test::i=20;
这表明:
- 初始化在类体外进行,而前面不加
static
,以免与一般静态变量或对象相混淆 - 初始化时不加该成员的访问权限控制符
private
、public
等 - 初始化时使用作用域运算符来表明它所属的类,因此,静态数据成员是类的成员而不是对象的成员。
- 类里的
static const
和const static
成员初始化
这两种写法的作用一样,为了便于记忆,在此值说明一种通用的初始化方法:
class Test{
public:
static const int mask1;
const static int mask2;
};
const Test::mask1=0xffff;
const Test::mask2=0xffff;
//它们的初始化没有区别,虽然一个是静态常量一个是常量静态。静态都将存储在全局变量区域,其实最后结果都一样。可能在不同编译器内,不同处理,但最后结果都一样。
完整实例
#ifdef A_H_
#define A_H_
#include <iostream>
usingnamespace std;
class A{
public:
A(int a);
staticvoid print();//静态成员函数
private:
static int aa;//静态数据成员的声明
staticconst int count;//常量静态数据成员(可以在构造函数中初始化)
const int bb;//常量数据成员
};
int A::aa=0;//静态成员的定义+初始化
const int A::count=25;//静态常量成员定义+初始化
A::A(int a):bb(a){//常量成员的初始化
aa+=1;
}
void A::print(){
cout<<"count="<<count<<endl;
cout<<"aa="<<aa<<endl;
}
#endif
void main(){
A a(10);
A::print();//通过类访问静态成员函数
a.print();//通过对象访问静态成员函数
}
初始化位置
静态成员不能在类的定义里初始化(除int外)。不能在头文件里初始化。
比如定义了myclass.h
,一般放到 myclass.cpp
里初始化它。
网友评论