C++_静态成员变量介绍

介绍

  • 静态成员是什么
    1.静态成员属于类而不属于对象,生命周期只存在当前进程中
    2.相当于全局变量和全局函数,只是多了类作用域和访问控制属性限制
  • 静态成员有什么用
    1.静态成员函数没有this指针,没有常属性
    2.静态成员依然有类的作用域和访问限定符约束
  • 静态成员怎么用
    1.静态成员变量的定义和初始化只能在 类 的外部,不能在构造函数中
    2.静态成员变量为该类所有对象共享
    3.访问静态成员可以通过 对象 也 可以直接通过 类
    4.静态成员函数 只能访问 静态成员(且没有this指针)

笔记扩充

1.类里面 函数的声明带const 那定义也要带const.

源码

main.cpp

#include<iostream>
#include<string>
#include "Account.h"
using namespace std;

void main()
{
   
   
	Account ICBA;
	ICBA.adjust(0.3);//调整利率
	
//一号账户
	Account acc1("一航", 101, 4000);
	acc1.draw(2000);//取款
	acc1.query();//查看余额
	acc1.stetle();//调息
	acc1.query();
	cout &l
### C++静态成员变量的概念 在 C++ 中,静态成员变量属于整个类而非某个特定对象实例。这意味着无论创建多少个该类的对象,静态成员变量都只有一份副本存在于内存中,并且可以被所有对象共享访问。 ### 静态成员变量的声明与定义 静态成员变量需先在类体内声明,在类体外单独定义并初始化: ```cpp class MyClass { public: static int count; // 只是声明 }; int MyClass::count = 0; // 定义和初始化[^1] ``` 注意这里 `MyClass::count` 的定义是在全局作用域下完成的,而不是放在任何函数内部。 ### 初始化方式 对于不同类型的成员变量而言,其初始化的方式也有所不同。具体到静态成员变量上,有如下特点: - **不能直接在类内初始化**(除了静态常量整型数据成员),而应该在类外部进行初始化; - 如果是非const类型的静态成员,则既可以在构造函数内的初始化列表中指定初始值也可以通过其他途径设置默认值;但是更常见的是直接在外面给定一个具体的数值作为起始状态。 - 对于`static const` 成员如果编译期已知的话可以直接在类里面给出初值[^2]。 例如下面的例子展示了如何处理不同类型的数据成员: ```cpp #include <iostream> using namespace std; class Example { private: double normalMember; const char* constPtrToConstChar="hello"; static int s_var; static constexpr int s_constexpr_var=98765;// 编译时常量 public: Example():normalMember(3.14),s_var(1){} // 构造器初始化列表尝试对静态成员赋值会报错,此处仅为示范正常成员初始化 }; // 正确做法是在文件范围内定义并初始化静态成员变量 int Example::s_var = 12345; int main(){ cout << "Static variable initialized to:"<<Example::s_var<<endl; } ``` 上述代码片段中,`s_var` 是静态成员变量,它应当在类之外的地方定义并且赋予初始值。而对于 `constexpr` 类型的静态成员则允许在类定义时即刻给予固定不变的具体取值[^3]。 ### 访问权限及注意事项 尽管静态成员不属于任何一个具体对象,但仍遵循相应的存取控制符 (`public`, `protected`, 或者 `private`) 来决定谁能对其进行操作。另外需要注意的一点就是当涉及到多线程环境下的并发读写时要特别小心同步问题以免引发竞争条件等问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值