static数据成员、static成员函数

本文介绍了C++中静态成员变量的特点与优势,包括信息隐藏、避免命名冲突等,并探讨了静态成员函数的作用及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

static数据成员的引入:
不同对象之间共享访问,本质上是对该类型所有对象,只维持一份拷贝

与全局变量相比,优势:
1. 静态数据成员仍然是在类域名字空间,没用进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能
2. 可以实现信息隐藏,静态数据成员可以是private成员,全局变量不行

注意:
1. 静态数据成员必须在类定义外初始化,但const静态数据成员除外,const静态数据成员可以在类体中初始化
一般情况下:
1 //类体c1.h
2 class c1
3 {
4 public:
5 dot.gif
6 private:
7    static int num;
8    static const  string name = "chio";
9 };

1 //类实现c1.cpp
2 #include "c1.h"
3 
4 int c1::num = 20;
  const string name ; //仍然需要在类体外定义
5 void c1::..
6 

2. 类成员函数(无论是static成员函数或非static成员函数)都可以直接访问static数据成员
3. 访问方式有两种:  object.static_var 或   classname::static_var
特殊性:
1. static数据成员的类型可以是其所属类,而非static数据成员类型只允许为该类的指针或引用
example:
1 class Bar
2 {
3 public
4     //dot.gif
5 private:
6     static Bar mem1;//ok
7     Bar *mem2;//ok
8     Bar mem3; //error
9 };

2. 静态数据成员可以作为类成员函数的缺省参数,而非static成员不能。
分析:静态成员函数如果未初始化,系统自动会给它初始化为某个缺省值(如int初始化为0, 指针初始化为NULL等)。 所以一旦定义,其值已确定,可以作为类成员函数的缺省参数



static成员函数的引入:
如果某成员函数只访问static数据成员,而不访问任何其他的数据成员(非static),那么此成员函数就与哪个对象来调用无关。

1. 只在类体的函数声明前加static, 类体外函数定义不能指定关键字static
2. 静态成员函数没有this指针
3. 访问方式也有两种



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值