C++中的类静态成员和静态成员函数

今天刚开始看《深度探索 C++ 对象模型》,刚看到第一章,竟然发现自己对类静态成员和静态成员函数还不够了解。查看了《 C++ Primer 》后,有以下几点体会:
(1)         为什么需要类静态成员?
有时候某个类的多个对象需要访问一个全局对象,在这种情况下“提供一个全局对象”比“每个类都维持一个独立的数据成员”要更为有效。而类静态成员与全局变量相比,又有两点好处:( a )不存在与程序中其他全局名字冲突的可能性;( b )可设置为 private ,实现信息隐藏。
(2)         类静态成员的特点
对于非静态数据成员,每个类对象都有自己的拷贝,而静态数据成员对每个类类型只有一个拷贝。由于静态数据成员分配在全局数据区,因此在程序开始运行时就必须存在,故静态数据成员的空间分配和初始化不可能在 main 函数或其他函数中完成(因而在局部类中也不允许出现静态数据成员)。这样一来,静态数据成员的空间分配和初始化只可能有以下三种途径:( a )类的头文件:这里有类的声明。但存在一个无法回避的问题:对于静态数据成员,在程序中也只能存在一个定义,而类的头文件可能被重复引用而出现重复定义;( b main 函数前的全局数据声明和定义处:这种方法也有问题,每一个使用该类的程序都必须在此处定义一下该类的静态成员,这是不现实的;( c )类定义的内部实现:这是最为理想的方式,引用时只需包含头文件即可。
#include  " account.h "
double  Account::_interestRate  =   0.05
(3)         类静态成员的定义
在对静态数据成员进行定义时有以下几点注意事项:( a )在类定义之外定义时,静态成员的名字必须被其类名限定修饰,前不可再添加 static ;( b )像 int 等有序类型的静态数据成员可在类定义中初始化,但仍需在类定义外进行定义,但此时已不能指定初始值;
//  头文件
class  Account 
{
// ...
private:
static const int nameSize = 16;
static const char name[nameSize];
}
;
//  文本文件
const   int  Account::nameSize;  //  必需的成员定义,此处不可再进行初始化
const   char  Account::name[nameSize]  =   " Saving Account " ;
(4)         类静态成员的访问:
在类的成员函数中可以直接访问该类的静态数据成员,而在非成员函数中可使用成员访问操作符或类名限定修饰的方式进行访问。
(5)         静态成员函数:
静态成员函数无法访问属于具体类对象的非静态数据成员,也无法访问非静态成员函数,他只能访问静态数据成员和调用其余的静态成员函数。这样一来,就能防止类的非静态数据成员遭受窜改。静态成员函数没有 this 指针,任何在静态成员函数中显式或隐式地引用这个指针都将导致编译时刻错误。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值