C++类的静态成员、静态成员函数、静态变量、常量、静态常量(C++primer,P428-P441总结)

类的静态成员与静态方法

先讲一下类的静态成员与静态成员函数。
类的静态成员作用:类对象之间共享数据。
类对象与对象之间的成员变量是相互独立的,想要共享数据,则需要静态成员与静态方法(静态方法没太多必要)。
使用静态成员注意事项:

  • 静态成员不存储在对象中,存储在静态区,编译时初始化
  • 类中声明声明静态成员即可使用,不能类中初始化
  • 静态成员初始化应该在类的方法文件中(cpp文件),且在构造函数之前(也就是先初始化静态成员,定义静态方法,再定义其它方法);
  • 初始化时,不带static,使用(类名::成员名)初始化
  • 不能使用参数初始化列表;
  • 可以使用(对象.成员名)使用静态变量;

静态方法注意事项:

  • 类中声明,不定义;
  • 定义位置同静态成员;
  • 静态方法内无this指针;
  • 静态方法内不能调用非静态成员

归根揭底,静态的成员、方法有这么多限制,主要是因为其是静态的,存储位置不属于类,定义/初始化早于类。

类的静态变量

没什么好讲的,就是上面的静态成员,提这个名词主要是对比静态常量。

类中常量

类中有许多方法定义常量,这是只讲一下const定义的常量。
类内常量的作用域属于类级,即该类的所有对象均具有同一个值。
需要注意的点:

  • 在c++98中,const成员只能在构造函数后的初始化列表中初始化
  • 在C++11中,const成员可以在声明时就初始化;

原因:构造函数创建对象时,对象在执行构造函数函数体前(即大括号之前)被创建(即分配存储空间)。因此,调用构造函数将为对象的成员变量分配内存。然后程序流程进入到构造函数函数体(大括号中的代码),使用常规的赋值方式对成员变量进行赋值。因此,对于const数据成员,必须在执行到构造函数体之前,即创建对象(即为const变量分配内存时),进行初始化。因此,const成员不能通过普通的构造函数来初始化。

//初始化列表
class A {
private:
	static int num;
	static double a;
public:
	A();
}
//初始化列表
A::A(): num(0), a(0.0){
	...
}

类中的静态常量

为什么有了常量之后还需要静态常量?
还记得静态成员存储的位置吗?不存储在类中,所有对象共享静态成员。
所以静态常量存在的最大意义就在于,创建多个对象时,节省内存空间。

注意事项:

  • 类中只有唯一的一份拷贝,数值无法修改;
  • 可以在声明处初始化,也可以像static在类外初始化;
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值