zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    HTTP协议强化理解
    常识
    向后看,比起实习期,现在的你不是已经很好了吗?
    Git学习笔记——一个NB的分布式版本控制系统
    计算机通识
    多测师讲解——sql 注入——高级讲师肖sir
    多测师讲RF _关键字整理_高级讲师肖sir
    多测师讲解RF _REQUEST_高级讲师肖sir
    多测师jenkins_svn和git拉取代码_高级讲师肖sir
    多测师讲解jenkins_设置邮箱_高级讲师肖sir
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/9612636.html
Copyright © 2011-2022 走看看