欢迎光临散文网 会员登陆 & 注册

C++ 类的静态成员

2023-04-17 10:49 作者:S-a-i_  | 我要投稿

如果我们希望某些成员与类直接相关,而不是与类的对象相关。例如一个银行账户需要一个成员表示基准利率,那么我们希望利率和类关联,而不是和类的每个对象关联,更重要的是我们希望一旦利率改变,所有的对象都能直接改变为新值。


声明静态成员

类的静态成员存在于任何对象之外,对象中不包含任何与静态数据成员有关的数据,所以每个Account对象包含两个数据成员owner和amount,存在一个interestRate对象并且被所有Account共享。

由于静态成员函数不和任何对象绑定,他们没有this指针。所以没有this指针的一系列操作。


使用类的静态成员

依旧是作用域运算符访问成员。

虽然静态成员函数不属于类的某个对象,但是我们依然可以使用类的对象、引用或者指针来访问

成员函数不用通过作用域运算符直接使用静态成员


定义静态成员

如果我们在类的外部定义静态成员时,不能重复static关键字,static只出现在类内部的声明中

因为静态数据成员不属于类的任何一个对象,所以他们并不是在创建类的对象时被定义的,他们不是由类的构造函数初始化的,一般来说我们不能在类的内部初始化静态成员,必须在类的外部定义和初始化每个静态成员。

类似于全局变量,静态数据成员定义在任何函数之外,因此一旦他被定义,就将一直存在程序的整个声明周期中。

虽然initRate是私有的,但是我们也能用它来初始化interestRate,interestRate的定义也能访问类的私有成员。


静态成员的类内初始化

我们可以为静态成员提供const类型的类内初始值。

这里我们用静态变量定义了数组成员的维度。


 静态数据成员可以是不完全类型,但数据成员要是完全类型。

特别的是,静态数据成员的类型可以就是他所属的类类型,而非静态数据成员只能声明成他所属类的指针或引用。

静态成员可以作为默认实参

非静态数据成员不能作为默认实参,因为它的值本身属于对象的一部分,这么做的话,无法真正提供一个对象以便从中获取成员的值,从而引发错误。

C++ 类的静态成员的评论 (共 条)

分享到微博请遵守国家法律