静态成员变量

02-8-1 静态成员变量

静态成员变量的特点:

  • 所有对象共享一份数据;

  • 在编译阶段分配内存(一般的数据存放在栈区)

    相当于在运行可执行文件前就已经分配完成了。(在 windows 环境下.exe就是可执行文件)(静态成员变量数据存放在全局区)

  • 类内声明,类外初始化

  1. 所有对象共享一份数据

    #include 
    using namespace std;
    //静态成员变量
    class Person
    {
    public:
    static int m_A;
    };
    int Person::m_A = 10;
    int main()
    {
    class Person p1;
    cout << "p1.m_A=" << p1.m_A << endl;
    class Person p2;
    p2.m_A = 100;
    cout << "p1.m_A=" << p1.m_A << endl;
    return 0;
    }

    在这里,p2修改了属性m_A,但是m_A是一个静态成员变量,静态成员变量有一个特点就是所有对象共享一份数据。所以当我们再次打印p1.m_A的数据值的时候,也会显示为100

    静态成员变量不属于某个对象上,因为所有对象都共享同一份数据。因此,静态成员对象有两种访问方式。

    1. 通过对象进行访问

      int Person::m_A = 10;
      int main()
      {
      class Person p;
      cout << p.m_A << endl;
      return 0;
      }
    2. 通过类名进行访问

      int Person::m_A = 10;
      int main()
      {
      cout << Person::m_A << endl;
      return 0;
      }

    当然,这里的访问只是使用了cout来示例,比如说需要重新赋值,Person::m_A = 100;也是凑效的。

    静态成员对象也是有访问权限的。

    比如将一个静态成员对象定义在private(私有)权限下:

    class Person
    {
    public:
    static int m_A;
    private:
    static int m_B;
    };
    int Person::m_A = 10;
    int Person::m_B = 20;
    int main()
    {
    cout << Person::m_A << endl;
    //cout << Person::m_B << endl;
    return 0;
    }

    在这里,想要打印m_B是会报错的。报错内容如下:

    成员 "Person::m_B" (已声明 所在行数:xx) 不可访问

    类外访问不到私有的静态成员对象。

  2. 类内声明,类外初始化

    创建一个静态成员对象很简单,只要在成员对象前添加关键在static

    class Person
    {
    public:
    static int m_A;
    };

    在类外初始化的意思是:不可以在类的代码块内。

    比如说

    class Person
    {
    public:
    static int m_A;
    };
    int Person::m_A = 100;
    int main()
    {
     return 0;
    }

    或者是:

    class Person
    {
    public:
    static int m_A;
    };
    int main()
    {
     int Person::m_A = 100;
     return 0;
    }

    需要注意的是:

    1. 首次初始化需要声明数据类型。如上面的例子就是:int Person::m_A = 100;。之后赋值不需要重新声明数据类型。
    2. 在非类内,需要声明作用域。上面的例子中就是:Person::m_A

    总结:

    1. 静态成员变量的特点
      • 所有对象共享一份数据
      • 在编译阶段分配内存
      • 类内声明,类外初始化
    2. 静态成员变量的访问方式
      • 通过对象进行访问
      • 通过类名进行访问
    3. 静态成员变量也遵守相应的权限管理。
文章「静态成员变量」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/878」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇