C++学习之:类与static(静态数据成员、静态成员函数、静态常量成员)

1.静态数据成员

整个类所有对象共享的数据,方法是在数据成员前加上static关键字

class SavingAccount//类的定义
{
    char  name[20]; //存户姓名
    char  addr[60]; //存户地址
    double  total;      //存款额
     static double  rate;    //利率
    …
}

类的定义只是给出了对象构成的说明,真正的存储空间是在对象定义时分配的。系统为对象分配空间时,并不再为静态数据成员分配空间。
静态数据成员的定义一般出现在类的实现文件中。比如在类SavingAccount的实现文件中,这样定义:

double SavingAccount::rate=0.05;

注意:
1.静态数据成员不属于对象的一部分,而是类的一部分;
2.静态数据成员的初始化不能放在类的构造函数中;
3.类定义并不分配空间,空间是在定义对象时分配,类的静态数据成员拥有一块单独的存储区,而不管创建了多少个该类的对象。所有这些对象的静态数据成员都共享这块空间。.但静态数据成员属于类,因此定义对象时并不为静态成员分配空间。
4.可以通过作用域操作符从类直接调用。如: SavingAccount::rate ,它似乎又是对象的一部分,因此又可以从对象引用它。如有个SavingAccount类的对象obj,则可以用:obj.rate.由于是整个类共享的,因此不管用哪种调用方式,得到的值都是相同的 。

2.静态成员函数

静态的成员函数是为类的全体对象服务,而不是为某个类的特殊对象服务。静态成员函数不需要借助任何对象就可以被调用,所以编译器不会为它暗加一个this指针。因此,静态成员函数无法处理类中的非静态成员变量
静态成员函数的声明只需要在类定义中的函数原型前加上保留词static。 访问方式:

类名::静态成员函数名();
对象名.静态成员函数名()

定义静态成员函数的主要目的是访问静态的数据成员,不能访问一般的数据成员。静态成员函数可定义为内嵌的,也可在类外定义。在类外定义时,不用static。

3.静态常量成员

整个类的所有对象的共享常量。声明:

static const  类型  数据成员名 = 常量表达式; 

注意const数据成员和static const数据成员的区别
常量数据成员属于各个对象,不同对象的常量数据成员的值可以不同,静态常量数据成员是属于整个类,不同对象的的同一个静态常量数据成员值在一样的。
静态常量数据成员可以并且必须在类定义时初始化。

class sample {
      static const int SIZE = 10;
      int storage[SIZE];
      …
};
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
静态数据成员静态成员函数的用法: 静态数据成员静态成员函数一般用于实现与相关的全局函数,如工具函数、工厂函数等。静态数据成员静态成员函数可以通过名和作用域解析运算符::来访问。使用静态数据成员静态成员函数可以提高程序的效率,减小程序的内存开销。但需要注意,静态数据成员静态成员函数都不能访问非静态成员,因此需要根据具体情况选择是否使用。 const修饰对象成员的概念用法: const是C++中的关键字,它用于修饰对象成员。const修饰的对象成员不能被修改,从而保证了程序的安全性和稳定性。 const修饰对象:const修饰的对象不能被修改,它的值在初始化之后就不能被改变。例如:const int a = 10;表示a是一个常量,它的值不能被修改。 const修饰成员:const修饰的成员不能被修改,它在中一般用于声明常量成员常量成员函数。例如:const int MAX_SIZE = 100;表示MAX_SIZE是一个常量,它的值不能被修改。又例如:void print() const;表示print()函数是一个常量成员函数,它不能修改成员变量,只能读取成员变量的值。 使用const修饰对象成员可以提高程序的安全性和可读性,减少程序的错误。但需要注意,const修饰的对象成员在初始化后不能被修改,因此需要根据具体情况选择是否使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值