zoukankan      html  css  js  c++  java
  • (二)c++细分const与static

    参考自博文https://www.cnblogs.com/5iedu/protected/p/5397232.html

    在c++中

    const成员变量与const成员函数与const对象

    static成员变量与static成员函数与static全局变量

    const成员变量

    1. const用于类中成员变量时,将类成员变为只读属性(只读:不能出现在“=”的左边,但在类中仍可以用一个指针来修改其值。) 所以不可以直接在类的构造函数中初始化const 的成员。const成员变量必须在初始化列表中初始化;

    #include <iostream>
    using namespace std;
    
    class A
    {
    private:
            const int a;  // 声明类const成员变量,必须初始化
            int b;       // 声明类non-const成员变量,可不初始化
    public:
            A():a(10)  // 必须初始化
            {
               a = 10;  // 错误
                    // b = 9; 正确
              b = 9;   // 正确
            }
    };
    
    int main()
    {
            A a;
            return 0;
    }

    const成员函数  const对象

    1. const 成员函数只能调用const成员函数

    2. const 成员函数调用const成员变量和non-const成员变量;

    3. const 成员函数不能修改成员变量的值

    4. non-const 成员函数调用const和non-const成员函数;

    5. const 对象只能调用const成员函数;

    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    class A
    {
    private:
            int a;
            const int b; // const成员变量,有几个构造函数就要初始化几次
    public:
            A(int x):b(90)
            {
                    cout<<"A(int x)"<<endl;
                    a = x;
            }
    
            A(const A& x):b(80)
            {
                    cout<<"A(const A& x)"<<endl;
                    a = x.a;
            }
    
            int getA() const
            {
              // a = 90; const 成员函数不能修改成员变量的值; return a; } void show() const { cout<<"getA()"<<getA()<<endl; //  const 成员函数只能调用const成员函数不能调用non-const成员函数 cout<<"a="<<a<<endl; // const 成员函数能调用const成员变量和non-const成员变量; cout<<"b="<<b<<endl; } void print() { cout<<"a="<<a<<endl; } };

    int main()
    {
      A a(10);
      a.print();
      a.show();

      

      cout<<"----------------"<<endl;
      

      const A b(80);
      b.show();
      return 0;
    }

    static成员变量

    由于普通的成员变量,是不能对象之间共享,且每个对象的成员变量都是专属的,只能通过对象名来访问public成员变量

    如果多个对象想共享一个成员变量,该如何,static解决了此问题

    1. 静态成员变量属于整个类所有

    2. 静态成员变量的生命周期也不依赖任何对象

    3. 既可以通过对象名,也可以通过类名直接访问public静态成员变量

    4. 所有对象共享类静态成员变量

    5. 静态成员变量,在内部位于全局数据区,需要类外单独为其分配空间;

    6. 在类中,只是声明静态变量,并没有定义

    7. 静态成员变量一定在类外初始化

      这是因为被static声明的类静态数据成员,其 实体 远在main()函数开始之前就已经在全局数据段中诞生了(《Inside the C++ Object Model》page247)!其生命期和类对象是异步的,这是最主要的原因

    static成员函数

    static全局变量

    做一个优秀的程序媛
  • 相关阅读:
    信息体系结构原则之二——有用性目标
    信息体系结构原则之一——复杂性和简单性
    最近的一些近况与规划(13.05月)
    asp OO4O '800a01b8'
    SPMobileMessageSmsBuilder 该服务提供商不支持短信 The ServiceProvider does not support SMS
    SQL日志截断
    用户配置文件同步服务备注
    Sharepoint JS CSS 注册
    Word 正文从1开始编页码
    Sharepoint 短信服务 OMS 证书导入
  • 原文地址:https://www.cnblogs.com/oytt/p/13066888.html
Copyright © 2011-2022 走看看