(二十五)静态成员

static定义全局变量

//Object.h
class Object
{
public:
    static int number;
};

//Object.cpp
#include "Object.h"
int Object::number = 1;

//main.cpp
#include<stdio.h>
#include "Object.h"
int main()
{
    Object::number = 2;
    printf("%d\n",Object::number);
    return 0;
}
  • static变量的几个要素
  • 变量声明放在类体(Object.h)大括号内,不能加初始值
  • 变量定义放在类体之外
//Object.cpp
#include "Object.h"
int Object::number = 1;
  • 在main函数中使用,和使用普通变量一样,区别是要加上Object::前缀而已
int main()
{
    Object::number = 2;
}
  • static函数的几个要素和变量要素相同

与普通成员的区别

  • static变量不属于这个类
class Object
{
public:
    int a;
public:
    static int b;
};

Object::a = 1;
Object::b = 2;

sizeof(Object)的值为4,因为它包含一个成员变量a,而b则不计入总大小

  • static函数里没有this指针,下列代码是不正确的!
class Object
{
public:
    int a;
public:
    static void Set()
    {
        this->s = 1;
    }
};

static语法的特点

  • 受public/private限制
//Object.h
class Object
{
public:
    void call();
private:
    static void Test();
};

//Object.cpp
#include "Object.h"
void Object::Test()
{
    printf("...");
}
void Object::Call()
{
    Test(); //从内部调用的时候,Object::可以忽略,加上也行
    //Object::Test();
}

//main.cpp
#include "Object.h"
int main()
{
    //Object::Test;   错误!由于是private,不允许被外部调用
    Object obj; 
    Obj.Call(); //可以通过调用Call间接调用Test
}
  • 可以自由访问类的其他成员(普通的全局函数无法访问类的私有成员)
//Object.h
class Object
{
private:
    void DoSomething();
    int x,y;
public:
    static void Test(Object* obj); 
};

//Object.cpp
//这里要赋给x,y值,由于Object没有this指针,所以只能显式地传入一个对象
void Object::Test(Object* obj)
{
    obj->x = 1;
    obj->y = 2;
    obj->DoSomething();
}
void Object::DoSomething
{
    printf("...");
}

//main.cpp

Object obj;
Object::Test(&obj);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.C和C++的区别?C++的特性?面向对象编程的好处? 答:c++在c的基础上增添类,C是一个结构化语言,它的重...
    杰伦哎呦哎呦阅读 9,722评论 0 45
  • 有人说:“书是阶梯,书是船只,书是良药,书是营养,书是智慧,书是老师。”书,对于人类的重要性,怎样评价,都不为过。...
    清酒无欢阅读 332评论 0 0
  • 以下全文来自图说区块链。因为不会用自己的语言方式来说明概念,所以全部都是抄送全文的。这让我明显感到只有深入理解一个...
    徐伟_1226阅读 430评论 0 0
  • 手机被人们现在形容成人们离不开的大烟! 打车我用的手机叫的滴滴! 车一来,坐车上我就开始玩游戏,司机现在也不闲着了...
    火龙鸟阅读 367评论 0 0
  • 1不开心的时候,我喜欢一个人走路,因为你会感觉烦恼被甩在脑后。 2你别嫌弃我走得快,我是在试探,你前面的路应该很安...
    kotlon阅读 266评论 0 0