美文网首页C/C++
(二十五)静态成员

(二十五)静态成员

作者: RGiskard | 来源:发表于2018-11-04 20:55 被阅读0次

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);

相关文章

  • (二十五)静态成员

    static定义全局变量 static变量的几个要素 变量声明放在类体(Object.h)大括号内,不能加初始值 ...

  • 06.静态的注意事项

    静态的注意事项 A:静态成员只能直接访问静态成员 B:非静态成员既可以访问非静态成员也可以访问静态成员

  • C++——静态成员函数与静态成员变量

    静态成员函数与静态成员变量使用static进行定义。 静态成员函数和静态成员变量其实就是全局函数与全局变量。 静态...

  • C++——静态成员函数与静态成员变量

    静态成员函数与静态成员变量使用static进行定义。 静态成员函数和静态成员变量其实就是全局函数与全局变量。 静态...

  • TypeScript 03——成员方法定义与调用

    类中的成员分为: 静态成员 和 实例成员;静态成员包含了:静态属性 和 静态方法;实例成员包含了:实例属性 和 实...

  • 内部类

    静态内部类 静态内部类只能调用静态成员变量,不能调用非静态成员变量; 成员内部类 成员内部类和成员变量类似; 局部...

  • static静态成员变量、成员函数的作用

      数据成员可以分为静态变量、非静态变量两种。  静态成员:静态类中的成员加入static修饰符,即是静态成员,可...

  • C++第六弹---静态成员与友元

    静态成员 静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即<类名>::<静态成员名>。 ...

  • 18-static成员

    静态成员(static) 静态成员:被static修饰的成员变量/函数,可以称为静态成员。 可以通过对象(对象.静...

  • 类型转换、static成员、单例模式

    静态成员(static) 静态成员:被static修饰的成员变量\函数可以通过对象(对象.静态成员)、对象指针(对...

网友评论

    本文标题:(二十五)静态成员

    本文链接:https://www.haomeiwen.com/subject/dlpdxqtx.html