• C++类中静态变量和静态方法的注意事项


    在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量仅仅存储一份供全部对象共用。所以在全部对象中都能够共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还能够节省内存。

    static成员的全部者是类本身和对象,可是多个对象拥有一样的静态成员。从而在定义对象时不能通过构造函数对其进行初始化; 静态成员不能在类定义里边初始化,仅仅能在class body外初始化; 静态变量依然符合public、private、protect特性; 静态成员函数没有this指针,它不能返回非静态成员,由于除了对象会调用它外,类本身也能够调用 。

    一 静态变量
    1、静态变量必须在外部定义和赋值
    a、不能在 main() 函数中定义
    这里写图片描写叙述

    b、不能在类的构造函数中定义
    这里写图片描写叙述

    2、必需要定义静态变量,否则该变量没有内存空间(类中仅仅是申明)
    这里写图片描写叙述

    3、类本身能够直接调用静态变量
    这里写图片描写叙述

    4、静态变量依然符合public、private、protect特性
    这里写图片描写叙述

    二 静态方法
    1、静态方法能够被类直接调用,可是同静态变量一样符合public、private、protect特性
    这里写图片描写叙述

    2、静态成员函数不能够调用类的非静态成员。由于静态成员函数不含this指针。
    这里写图片描写叙述

    3、静态成员函数不能够同一时候声明为 virtual或后缀const 函数。由于virtual就是用来区分是哪个对象调用了他,与静态方法矛盾。

    而后缀const是用来修饰this指针的,静态变量中不包括this指针。
    a、不能够同一时候声明为 virtual
    这里写图片描写叙述

    b、不能够同一时候声明为后缀const
    这里写图片描写叙述

  • 相关阅读:
    BZOJ2243: [SDOI2011]染色(树链剖分/LCT)
    BZOJ2157: 旅游(LCT)
    BZOJ3510首都(LCT)
    BZOJ4530 [BJOI2014]大融合(LCT)
    BZOJ2631: tree(LCT)
    BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(LCT)
    BZOJ3282: Tree (LCT模板)
    [NOI2008]假面舞会(DFS)
    斜率优化dp练习
    BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/7089601.html
Copyright © 2020-2023  润新知