• C++__静态成员


    静态成员

    在类定义中,它的成员(包括成员变量和成员函数),这些成员可以用关键字static声明为静态的,称为静态成员。

    不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝被所有属于这个类的对象共享。

    静态成员变量:

    在一个类中,如果将一个成员变量声明为static,这种成员称为静态成员变量,不管建立了多少个对象都只有一个静态数据的拷贝。静态成员变量是属于整个类,所有对象共享。

    静态变量在编译阶段就分配空间,对象还没有创建的时候就已经分配空间了。

    注意点

    静态成员变量必须在类中声明,在类外定义

    静态数据成员不属于某个对象,在为对象分配空间中不包括静态成员所占空间

    静态数据成员可以通过类名或者对象名来引用

    //例子
    class Person{
    public:
    //类的静态成员属性
    static int sNum;
    private:
    static int sOther;
    };

    //类外初始化,初始化时不加static
    int Person::sNum = 0;
    int Person::sOther = 0;
    int main(){


    //1. 通过类名直接访问
    Person::sNum = 100;
    cout << "Person::sNum:" << Person::sNum << endl;

    //2. 通过对象访问
    Person p1, p2;
    p1.sNum = 200;

    cout << "p1.sNum:" << p1.sNum << endl;
    cout << "p2.sNum:" << p2.sNum << endl;

    //3. 静态成员也有访问权限,类外不能访问私有成员
    //cout << "Person::sOther:" << Person::sOther << endl;
    Person p3;
    //cout << "p3.sOther:" << p3.sOther << endl;

    system("pause");
    return EXIT_SUCCESS;
    }

    静态成员函数

    和静态成员变量一样,所有的对象都共享一个静态成员函数。静态成员函数主要为了访问静态变量,但是,不能访问普通成员变量。

    静态成员函数主要是拿来管理静态数据成员。

    注意点:

    所有对象都共享统一分函数

    静态成员函数只能访问静态变量

    静态成员函数的使用和静态变量是使用相同

    静态成员函数也有访问权限

    普通成员函数可以访问静态成员变量,也可以访问非静态成员变量

    class Person{
    public:
    //普通成员函数可以访问static和non-static成员属性
    void changeParam1(int param){
    mParam = param;
    sNum = param;
    }
    //静态成员函数只能访问static成员属性
    static void changeParam2(int param){
    //mParam = param; //无法访问
    sNum = param;
    }
    private:
    static void changeParam3(int param){
    //mParam = param; //无法访问
    sNum = param;
    }
    public:
    int mParam;
    static int sNum;
    };

    //静态成员属性类外初始化
    int Person::sNum = 0;

    int main(){

    //1. 类名直接调用
    Person::changeParam2(100);

    //2. 通过对象调用
    Person p;
    p.changeParam2(200);

    //3. 静态成员函数也有访问权限
    //Person::changeParam3(100); //类外无法访问私有静态成员函数
    //Person p1;
    //p1.changeParam3(200);
    return EXIT_SUCCESS;
    }

     

  • 相关阅读:
    mysql数据库基本类型
    常用辅助类【转】
    Java 并发笔记】并发机制底层实现整理[转发]
    关于PROPAGATION_NESTED的理解
    线程数设置
    c# Expression 扩展[转]
    Net定时器 【转载】
    【转】高可用设计-58沈剑
    【转】委托的三种调用示例(同步调用 异步调用 异步回调)
    [coursera OA] acme match
  • 原文地址:https://www.cnblogs.com/beautiful7/p/14206811.html
Copyright © 2020-2023  润新知