(二)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全局变量

做一个优秀的程序媛
原文地址:https://www.cnblogs.com/oytt/p/13066888.html