CPP_const&static

const

1. 定义本地常量,替换宏。
#define LENGHTH 16
static const int LENGHTH = 16;
2. const出现在星号左边,表示被指物是常量;const出现在星号的右边,表示指针本身是常量。
const int *p = &a;
p=&b; true
*p = 1; error
这里const修饰的是int,而int定义的是一个整数值。因此×p所指向的对象值不能通过×p来修改,但是可以重新给p来赋值,使其指向不同的对象。
3. const成员函数,编译器确保该函数不会改动对象数据。
4. const成员变量,表示一旦初始化以后不会再改变的数据,必须在类的构造函数初始化列表中初始化,不能在函数体内赋值。

static

1. static成员变量,表示类公有的数据(可以是private成员),没有保存在对象内部,存在于rw数据段,类sizeof不包含static变量大小。
静态数据成员在类外分配空间和初始化,必须在main函数和类外定义static变量,int A::b = 2;
static在C++中更好的替换全局变量或对象维护数量count(有类而非对象维护)设计的。

2. static成员函数,表示不依赖于对象的静态方法。可对象调用,也可直接类调用(A::goo()).
static成员方法中参数不包含隐藏的this指针(this是一个对象的指针),不能使用指针。
static成员方法不可访问非static成员变量。

example

// martain.h
#ifndef _MARTAIN_H_
#define _MARTAIN_H_

class Martain{
public:
    Martain(int id);
    ~Martain();

    void fight() const;
    void hide() const;
    static int getCount();

private:
    static int  martainCount;
    const int m_id;
};

#endif
// martain.cc
#include "martain.h"

int Martain::martainCount = 0;

Martain::Martain(int id) 
    :m_id(id)
{
//  m_id = id; // const常量只能在初始化列表初始化
    martainCount++;
}

Martain::~Martain(){
    martainCount--;
}

int Martain::getCount(){
//  return martainCount + m_id;
    return martainCount ; // 静态函数不能访问非静态成员
}

void Martain::fight() const{
    
}

void Martain::hide() const{

}
// main.cc
#include "martain.h"
#include <iostream>

using namespace std;

void func(){
    Martain c(3);
    int count = Martain::getCount();
    cout << "count= " << count << endl;
}

int main(int argc, char *argv[])
{
    int count = Martain::getCount();    
    cout << "count= " << count << endl;

    Martain a(1);
    count = Martain::getCount();    
    cout << "count= " << count << endl;

    Martain b(2);
    count = b.getCount();   
    cout << "count= " << count << endl;

    func();
    count = Martain::getCount();    
    cout << "count= " << count << endl;

    return 0;
}
$ g++ main.cc martain.cc -o test
$ ./test
count= 0
count= 1
count= 2
count= 3
count= 2
原文地址:https://www.cnblogs.com/embedded-linux/p/9612636.html