zoukankan      html  css  js  c++  java
  • C++学习笔记 const修饰类成员与成员函数

    一、 常数据成员

     常数据成员,已经初始化就不可以改变

    1   const int m;  //const 数据类型 数据成员名
    2   int const s;   //数据类型 const 数据成员名

    被const修饰的成员必须进行初始化,并且不能被更改。而初始化的方式则是在类的构造函数的初始化列表里进行的。

    1 class Clock
    2 
    3 
    4 Clock(int a,int b,int c):h(a),m(b),s(c)//类的构造函数的初始化列表

    通常把常数据成员定义为静态成员,使其成为类的一个常量

    1 private:    static const int x;  //静态常量类内申明,类外初始化

    其中x为static类型,因其静态化的特殊性,需要在类外初始化,即便为私有类型;

    二,常成员函数

    const成员函数可以使用类中的所有成员变量,但是不能修改他们的值,这种措施主要为了保护数据而设置。const成员函数也称常成员函数。

    需要在声明和定义的时候在函数头部的结尾加上const关键字

    1  char *getname() const;
    2   int getage() const;
    3  float getscore() const;

    常成员函数只能调用常成员函数,而不能调用非常成员函数,访问但不可以更改非常成员变量。

    注意:但是有一种情况例外,如果成员申明时加关键字mutable后,在常函数中依然可以修改

    1 //类名 *p=this;
    2 //普通类成员函数this指针:T* const(表示指针本身不能修改)
    3 //常成员函数this指针类型:const T* const(表示指针本身同时指针指向的内容不能修改)
    4 //类名 * const p=(类名* const)this;
    5 
    6 //p->成员=123;可以修改成员参数

    三,常对象

      常对象是指该对象在其生命周期内,其所有的数据成员的值都不能被改变;定义对象时加上关键字const,该对象就是常对象,其一般形式如下:

    1 const  class  object(params);
    2 class const object(params);
    3 
    4 
    5 //定义const指针
    6 const class *p = new class(params);
    7 class const *p = new class(params);

    一旦将对象定义为常对象之后,不管是哪种形式,该对象就只能访问被 const 修饰的成员了(包括 const 成员变量和 const 成员函数),因为非 const 成员可能会修改对象的数据(编译器也会这样假设),C++禁止这样做。

    数据成员非const的普通成员函数const成员函数
    非const的普通数据成员 可以引用,也可以改变值 可以引用,但不可以改变值
    const数据成员 可以引用,但不可以改变值 可以引用,但不可以改变值
    const对象 不允许 可以引用,但不可以改变值

    注意:1,不要误认为常对象中的成员函数都是常成员函数,常对象只保证其所有数据成员的值不被修改

       2,如果在常对象中成员函数未加const声明,则编译系统会把它当最非const成员函数处理

        3,常成员函数不能调用另外一个非const成员函数

  • 相关阅读:
    高格-一些特点话题【10】批次批号管理
    study Rust-4【所有权】这个太重要了!
    study Rust-3【表达式和函数】
    study Rust-2【环境与配置,随机数】
    unigui的错误delphi clientHeight:property clientheight does not exist【10】
    shr系统进入用户管理
    节点设置必录注意事项
    单据头字段设置必录
    插件强制设置单据体字段必录
    object转换为List<DynamicObject>
  • 原文地址:https://www.cnblogs.com/qq964107326/p/15008389.html
Copyright © 2011-2022 走看看