C++语言笔记系列之十——静态成员

1.静态成员
(1)由关键字static修饰
静态变量定义语句在编译阶段就执行,运行过程中不再执行。
(2)分类:静态数据成员、静态成员函数。
(3)静态成员时类的所有对象共享的成员,而不是某一个对象的成员。
2.静态成员的使用
(1)在定义说明前加上static关键字。例如:
static int x;
(2)静态数据成员必须进行初始化,并且初始化必须在类外完成。
(3)静态数据成员的初始化
数据类型 类名::静态数据成员名 = 值;//注意这里没有static出现
(4)绝对不能使用对象名来使用静态数据成员,再次强调静态数据成员是属于整个类公有,而非某一个对象。
对象名.静态成员名  //错误
(5)正确的使用方式
类名::静态数据成员
(6)如果静态数据成员的访问权限允许,才可以在类外访问。
3.静态数据成员举例
#include <iostream.h>

class Tc
{
  int i;
  static int k;
public:
  Tc()
  {
    i = 0;
    i ++;
    k ++;
  }
  void display()
  {
    cout<<"i = "<<i<<", k = "<<k<<endl;
  }
};
int Tc::k = 0;
int main()
{
  Tc A, B;
  A.display();
  B.display();
}
输出结果:
i = 1, k = 2
i = 1, k = 2

若改为:
Tc::Tc()
{
  i = 0;
  i ++;
  Tc::k++;//这个地方的Tc::可以省略
}
4.类的静态成员函数
(1)类的静态成员函数属于类而不是属于对象。
(2)类的静态成员函数视线中不可直接使用非静态成员,但是可以直接使用静态成员。
(3)若在静态成员函数中引用非静态成员,必须加对象名(静态成员函数接收参数然后通过参数来调用)。
5.补充
Test t1(t2); //调用拷贝构造函数
Test t1(5);  //调用构造函数
6.找出以下代码片段中的错误并分析原因。
class myclass
{
public:
    static void fun();
private:
    static int global;
};
void myclass::fun()
{
    global = 100;
}
分析:错误出在将类的静态成员放在函数中初始化,正确的初始化方法是放在类外且在函数外完成。
class myclass
{
public:
    static void fun(myclass my);
private:
    int global;
};
void myclass::fun()
{
    cout<<global;
}
分析:错误出在两个地方,第一个地方,函数的定义和使用上出现了参数上的不一致;第二个地方类的静态成员函数可以引用静态数据成员,但对于非静态数据成员的引用必须通过对象来完成。
补充:
(1)全局变量中不出现static修饰,static要么出现在类内要么出现在函数内。
(2)引用对象时,类的对象必须先完成初始化。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值