C++的类静态成员变量初始化能在构造函数里初始化吗

c++类的静态成员变量
c++类的静态成员变量
static成员函数
在C++中,声明一个类的静态数据成员意味着所有的实例只有该数据成员的一个拷贝。 Static menber不属于对象的一部分,而是类的一部分。所以程序可以在没有初始化对象的时候就处理此种成员变量.但必须首先初始化类的静态成员变量。
不要把static成员变量的初始化操作安排在类的构造函数中,因为构造函数可能一再被调用,而变量的初值只应该设定一次。也不要把初始化操作安排在头文件中,因为它可能被载入到许多地方,因此就可能执行许多次。你应该在应用程序文件中,类以外的任何地方设定其初始值。例如在main之中,或者全局函数中,或任何函数之外:
double SavingAccount :: m_rate = 0.0075;
void main() {… …}
这么做可曾考虑到m_rate是个private数据?没关系,设定static成员变量初值时,不受任何存取权限的束缚。static成员变量的类型也出现在初值设定中,因为这是一个初值设定操作,不是一个赋值(assignment)操作。事实上,staic变量在这个时候(而不在类声明中)才定义出来。如果你没有做这个初始化操作,会产生连接错误。
static的成员变量的存取
类私有的static成员变量是无法通过(类::成员变量)的方式存取的。如
class Number{
static int stduent_
上面Number类的static成员变量stduent_number是类的私有成员变量,无法通过下面的方式进行存取
Number::stduent_number = 10;
int i = Number::stduent_
若想要上式成立,则stduent_number应该设定为public。
当已经初始化了类的具体对象,你也可以选择下面这种方式进行存取
num.stduent_number = 10;
int i = num.stduent_
注意:上面这种方式的存取仍然是要求stduent_number是public的。
Static成员变量并不是因为对象的实现才得以存在的,它本来就存在,你可以想象它是一个全局变量。只要access level允许,任何函数都可以存取static成员变量。
static成员函数
设计static成员函数,并将其设置为public则可以通过static成员函数实现私有static成员变量的存取。
由于static成员函数不需要借助于任何对象,就可以被调用,所以编译器不会为它暗加一个this指针。因此static成员函数无法处理类之中的non-static成员变量。
如下的static成员函数:
class Number{
static int student_number(){
return _stduent_
static void student_number(int stduent_number){
_stduent_number = stduent_
static int _stduent_
将static成员函数设定为public,则其他函数便可以通过调用此函数来存取私有 static成员变量。
我的热门文章
即使是一小步也想与你分享那一个成员变量又要在构造函数里使用,又要在静态函数里使用,解决思路 - C++当前位置:& &&&那一个成员变量又要在构造函数里使用,又要在静态函那一个成员变量又要在构造函数里使用,又要在静态函数里使用,解决思路&&网友分享于:&&浏览:2次那一个成员变量又要在构造函数里使用,又要在静态函数里使用,那一个成员变量又要在构造函数里使用,又要在静态函数里使用,------解决方案--------------------类的静态成员变量,用static定义的,并且要在类的外部进行初始化
类的静态成员变量只能由静态函数调用。
class Text
int Text::t=10;
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法 --转 -
- ITeye技术网站
博客分类:
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:
d.静态常量(整型)
e.静态常量(非整型)
常量和引用,必须通过参数列表进行初始化。
静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质见文末。
参考下面的代码以及其中注释:
#include &iostream&
class BClass
BClass() : i(1), ci(2), ri(i){} // 对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化
//普通成员变量也可以放在函数体里,但是本质其实已不是初始化,而是一种普通的运算操作--&赋值运算,效率也低
// 普通成员变量
// 常量成员变量
// 引用成员变量
// 静态成员变量
//static int si2 = 100;
// error: 只有静态常量成员变量,才可以这样初始化
// 静态常量成员变量
static const int csi2 = 100;
// 静态常量成员变量的初始化(Integral type)
// 静态常量成员变量(non-Integral type)
//static const double csd2 = 99.9;
// error: 只有静态常量整型数据成员才可以在类中初始化
//注意下面三行:不能再带有static
int BClass::si = 0; // 静态成员变量的初始化(Integral type)
const int BClass::csi = 1; // 静态常量成员变量的初始化(Integral type)
const double BClass::csd = 99.9; // 静态常量成员变量的初始化(non-Integral type)
// 在初始化(1)中的csi2时,根据著名大师Stanley B.Lippman的说法下面这行是必须的。
// 但在VC2003中如果有下面一行将会产生错误,而在VC2005中,下面这行则可有可无,这个和编译器有关。
const int BClass::csi2;
int main()
静态成员属于类作用域,但不属于类对象,和普通的static变量一样,程序一运行就分配内存并初始化,生命周期和程序一致。所以,在类的构造函数里初始化static变量显然是不合理的。静态成员其实和全局变量地位是一样的,只不过编译器把它的使用限制在类作用域内(不是类对象,它不属于类对象成员),要在类的定义外(不是类作用域外)初始化。
shaojiashuai123456
浏览: 145191 次
来自: 吉林
你好 请问怎么处理 客户端 socket发送数据超时后的崩溃问 ...
挺好的,谢谢露珠
挺好!值得学习
只有代码没有讲解 这也算日志类的非静态成员变量可以在定义的时候初始化吗?_c++吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:283,271贴子:
类的非静态成员变量可以在定义的时候初始化吗?收藏
一般来说是不行的,但是写程序的时候发现可以,这是为何?
AutoTDS-V1型全自动热解吸仪是一款20位常温二次全自动热解吸仪,气路采....
成员的构造函数当然会被调用了。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 c 静态成员变量初始化 的文章

 

随机推荐