C++_static与非static成员(函数)

static与非static成员(函数)

 《 C++ Primer》第4版399页:
对于特定类类型的全体对象而言,访问一个全局变量有时是必要的。然而,全局变量会破坏封装:对象须要支持特定类抽象的实现。若是对象是全局的,通常的用户代码就能够修改这个值。
鉴于此,类能够定义 类静态成员,而不是定义一个可广泛访问的全局对象。
 
一般,非static数据成员存在于类类型的每一个对象中。然而,static数据成员独立于该类的任意对象而存在
每一个static数据成员是与类关联的对象而不是与该类的对象相关联
 
类也能够定义static成员函数。static成员函数没有this形参,它能够直接访问所属类的static成员,但不能直接使用非static成员。
注意:类的非static成员函数是能够直接访问类的static和非static成员,而不用做用域操做符。
 
使用static成员的优势:
(1)避免命名冲突:static成员的名字在类的做用域中,所以能够避免与其余类的成员或全局对象名字冲突。
(2)能够实施封装:static成员能够是私有成员,而全局对象不能够。
(3)易读性:static成员是与特定类关联的,可显示程序员的意图。
 
static成员 与 非static成员调用方法:
非static成员经过对象调用。
static成员经过做用域操做符(直接调用)、对象、引用、指向该类类型对象的指针(间接调用)
class Lunais{
 
static double zty();
double zzz;
 
};
Lunais z;
Lunais *t = &z;
double zty;
 
zty = Lunais::zty();  // static成员经过做用域操做符(直接调用)
zty = z.zty();    //static成员经过对象(简接调用)
zty = t->zty();   //static成员经过指向该类类型对象的指针(简接调用)
 
static数据成员定义:
一、通常状况下,static数据成员是类内声明,类外定义;
二、static成员不经过类构造函数初始化,而是在定义时进行初始化;
三、一个例外:初始化式为常量表达式,整型 static  const  数据成员(static  const  int) 能够在类的定义体内进行初始化:
 
class Lunais{
 
static const int zty = 30;
 
}
值得注意的是:const static数据成员在类的定义体中出始化时,该数据成员仍必须在类的定义体外定义,只是再也不指定初始值:
const int Lunais::zty;
 
常实型 static const数据成员不可在类内初始化。一个好的解决方法是使用宏定义: #define zty 5421 .5421

 

###########################################程序员

如下引自:  http://blog.csdn.net/ljfeng123/article/details/20855515函数

###########################################this

常整型静态数据成员能够在类中直接初始化,而常实型静态数据成员不能够spa

 class circle
{
int a;                        // 普通变量,不能在类中初始化
static int b;                   // 静态变量,不能在类中初始化
static const int c=2;               // 静态常整型变量,能够在类中初始化
static const double PI=3.1416;//error C2864:    //只有静态常量整型数据成员才能够在类中初始化
} ;
 
const int cicle::c ;  //const static数据成员在类的定义体中出始化时,该数据成员仍必须在类的定义体外定义,只是再也不指定初始值
 
b能够在类外进行初始化,且全部对象共享一个b的值:
int circle::b = 2;
 
double circle::PI = 3.1416;
相关文章
相关标签/搜索