C++ 类Static成员分析

1.static成员

static数据成员非static数据成员存在于类类型的每一个对象中,而类static数据成员独立于该类的任意对象而存在;每个static数据成员是与类相关联的对象,并不与该类的对象相关联。

static成员函数:static成员函数没有this形参,这就意味着它是不能访问类中的非static数据成员的,而只能访问static数据成员。


使用类的static成员的优点:使用static成员而不是全局对象有三个优点:

(1)static成员的名字是在类的作用域中,因此可以避免与其他类的成员或者全局对象的名字冲突.

(2)可以实施封装。

(3)通过阅读程序可以更容易地看出程序员的意图,static成员是与特定的类相关联的。、


2.定义static成员

class Account
{
   public:
     static double rate() { return interestRate ; }
     static void rate(double) ;
  private:
     std::string amount ;
     double amount ;
     static double interestRate ;
     static double iniRate() ;
};


这个类的每个对象具有两个数据成员:owner和amount,对象没有雨static数据成员对应的数据成员,但是存在一个单独的static成员由全体的对象所共享。

3.使用类的static成员

可以通过作用域操作符从类直接调用static成员,或者通过对象,引用或指向该类类型对象的指针间接调用。

像其他成员一样,类成员函数可以不用作用域操作符来引用类中的static成员。


4.类的static成员函数

当我们在定义static成员函数时,如果是在类的外部定义函数时,不需要加上static关键字,只需要在类中static函数的声明处加上static关键字即可。

static成员是类的组成部分,但是不是任何类的对象的组成部分,因此static成员函数是没有this指针的。通过使用非static成员显式或隐式引用this是一个编译错误。

因为static函数不是任何对象的组成部分,所以static成员函数不能被声明为const,毕竟将成员函数声明为const就承诺不改变类中的数据成员。最后static函数也不能被声明为虚函数。



5.类的static数据成员

static数据成员必须在类定义体外部定义(正好一次)。不像普通的数据成员,static成员不能通过在类的构造函数中进行初始化,必须在定义时进行初始化。

例如:  double Account::interestRate = initRate() ;


6.特殊的整形const static 成员

一般而言,类的static成员,像普通数据成员一样,不能在类的定义体中初始化。相反static数据成员通常在定义的时候才初始化。

这个规则的例外就是,只要初始化式是一个常量表达式,整形cosnt static数据成员就可以在累的定义体中进行初始化:

static const int period = 30 ;


用常量初始化的整形const static 数据成员是一个常量表达式。同样地,它可以用在任何需要常量表达式的地方。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值