zoukankan      html  css  js  c++  java
  • C++回顾day01---<const常量重点>

    一:定义常整型数 const int a;(或者int const a;)  不涉及指针

    不可改变值(也不可通过指针修改)

    二:定义一个指向常整型数的指针 const int* c;   可改指针指向,不可以该内存数据

    const用于修饰int* c---是一个具体内存,所以该内存数据是不允许修改的,但是c自身是一个指针,是可以被修改的

    不允许修改内存数据

    可以修改指针指向

    三:定义一个常指针 int * const d; 可改内存数据,不可改指针指向

    const是修饰d指针变量,则该指针变量指向不允许修改,但是可以修改内存中值
    c是一个指针变量,代表一个地址,这个地址不允许修改(通过直接修改或者二级指针都不行),但是可以修改其中内存中值

    不允许修改修饰的指针

    由于const并没有修饰内存,所以可以修改内存数据

    四:定义一个指向常整型的常指针const int* const e;  内存和指针都无法修改

     

    五:总结--用于在为外提供接口时,防止其他人修改数据。

    主要看const修饰的是指针,还是整个内存数据来进行识别
    const int* c              -----   const修饰整个内存数据,故不可修改内存数据,可以修改指针地址
    int * const d             -----   const修饰指针变量d,故不可修改指针变量的值(即指针地址),但是可以修改内存
    const int* const e        -----   const修饰整个内存数据和指针地址,都不允许修改

    六:补充--符号表《重点》

    问题抛出(一):

    问题抛出(二)

    存疑:这里可以认为符号表是针对局部const常量存在

    解决(一):什么是符号表?《重点》

    碰见const局部常量声明,将这个常量名:常量值放入符号表(不同于直接使用的内存)

    解决(二):为什么a值不变,而*p值改变了《重点》

     

    1.a指向符号表,依旧存在,故不变(编译过程中若发现使用常量则直接以符号表中的值进行替换
    2.编译过程若发现对const使用extern或者&操作符,则给对应的常量分配存储空间

    七:常对象和常函数(非重点)

    (一)常对象

    const 类名 对象名  或者  类名 const 对象名
    声明为常对象的同时必须被初始化,并且之后不能改写对象的数据成员

    (二)常函数:对函数功能有更明确的限定,例如只能输出,但不能进行修改

    常函数不能修改对象的数据成员
    常函数只能调用常成员变量和其他常函数
    常函数可以进行重载
    void p()  //普通对象会调用
    {}
    
    void p() const  //常对象会调用
    {}
    class Test
    {
        int n;
        static int n2;
        const int n3;
    public:
        Test(int a) :n3(a)    //对于常量必须一开始就赋值
        {
            n = a;
        }
    
        void setNum(int a)
        {
            n = a;
        }
    
        static void setNum02(int a)
        {
            n2 = a;
        }
    
        void setNum03(int a) const
        {
        }
    };
    
    void main()
    {
        const Test t(10);
        Test::setNum02(15);
        system("pause");
    }
  • 相关阅读:
    栈和队列_leetcode23
    Android 广播
    Android Service
    Logcat monkey命令
    设计模式-观察者模式
    Android之Fragment优点
    Android架构: MVC 新浪微博
    Android消息处理机制(Handler、Looper、MessageQueue与Message)
    Android Annotations Eclipse 配置 (3)
    Android Annotations(2)
  • 原文地址:https://www.cnblogs.com/ssyfj/p/10624652.html
Copyright © 2011-2022 走看看