const成员函数作用
1. 不能修改类的成员变量,同时不能调用类的非const成员函数。
(const成员函数中,this的类型是一个指向const类类型对象的const指针,const成员函数返回*this作为一个const引用)。
2. 提供了基于const的重载。const对象只能使用const成员函数。非const对象可以使用任一成员,但非const版本是一个更好的匹配。

const形参:仅当函数形参是引用或指针时,可基于形参是指向const对象还是指向非const对象,实现函数重载。如果传递了const对象,则只有带const形参的版本才是调用的可行函数。如果传递的是非const对象,则两者均可,但非const形参是精确匹配。
如果输入参数采用“值传递”,由于函数将自动产生临时变量用于复制该参数,复制形参时并不考虑形参是否为const——函数操纵的是副本,无法修改实参。该输入参数也就无需保护,所以不要加const 修饰。例如不要将函数void foo(int x) 写成void foo(const int x)。

const数据成员:const数据成员或引用类型的成员,以及没有默认构造函数的类类型成员,都必须在构造函数初始化列表中进行初始化。在构造函数体内进行的是对数据成员的赋值。

可变数据成员:有时(但不是很经常),我们希望类的数据成员(甚至在const成员函数内)可以修改。这可以通过将它们声明为mutable来实现。可变数据成员不能为const,甚至当它是const对象的成员时也如此。因此,const成员函数可以改变mutable成员。

static类成员的优点
1. static成员的名字是在类的作用域中,可以避免与其它类的成员或全局对象名字冲突。
2. 可以实施封装,static函数可以是类的私有成员,全局函数则不可以。
3. static函数与特定类关联,不属于对象。静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,对静态数据成员的值更新,所有对象存取更新后的相同的值。

static成员函数
1. static成员函数没有this指针,通过使用非static成员显示或隐式地引用this是一个编译时错误。
2. static成员函数不是任何对象的组成部分,因而static成员函数不能声明为const。因为将成员函数声明为const就是承诺不会修改该函数所属的对象。
3. static成员函数也不能声明为虚函数。多态实现的基本原理是每个带有virtual函数的类的[实例]要包含一个指针,指向虚函数表(vtbl)。static函数作为类函数,不与任何[实例]相关,自然无法实现多态了。

static数据成员
1. static数据成员必须在类定义体的外部定义(正好一次)。不像普通数据成员, static成员不是通过类构造函数进行初始化,而是在定义时进行初始化。
2. static数据成员的类型可以是该成员所属的类类型。非static成员被限定声明为其自身类对象的指针或引用。

const与static类成员的更多相关文章

  1. static 类成员变量 和 static const类成员变量

    1.使用static类的优点: (1)避免与其他类的成员或者全局变量冲突 (2)可以封装 (3)阅读性好 2.static 数据成员独立于该类的任意对象而存在 static数据成员的类型可以是该成员所 ...

  2. C++中static类成员

    static局部变量 static局部变量确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化 这种对象一旦被创建,在程序结束前不会被撤销.在该函数被多次调用的过程中,静态局部对象会持续存在 ...

  3. static类成员(变量和函数)

    0. 使用背景 对于特定类类型的全体对象而言,访问一个全局对象有时是必要的.也许,在程序的任意点需要统计已创建的特定类类型对象的数量:或者,全局对象可能是指向类的错误处理例程的一个指针:或者,它是指向 ...

  4. 12.3——类作用域,构造函数,友元,static类成员

    类作用域: (1)成员函数在类外定义时,因为函数体还有形参列表都出现在成员名之后,都是在类作用域内定义,所以不用加域作用符 来引用其他的成员. (2)函数的返回值不一定需要在类的作用域中,但是若是返回 ...

  5. C++ static类成员,static类成员函数

    转载:ZJE_ANDY static修饰类中成员,表示类的共享数据 1.static类成员 C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处 ...

  6. C++之static类成员,static类成员函数

    0.static修饰类中成员,表示类的共享数据 1.static类成员 在C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处在.static类 ...

  7. .static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗。

    static的作用: 对变量: 1.局部变量: 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量. 1)内存中的位置:静态存储区 2)初始化:局部的静态变量只能被初始化一次, ...

  8. 【转】C++的const类成员函数

    我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误.例如, const char blank=' '; blank='\n'; //错误 面向对象程序设计中 ...

  9. [UE4]C++的const类成员函数

    我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误.例如: const char blank = ‘’; blank = ‘\n’; // 错误 要声明一个 ...

随机推荐

  1. vue学习图解

    vue2.0版本的学习图解个人心得!本文为原创禁止转载!!转载需要注明出处,谢谢合作!!!

  2. Masonry基础API

    Masonry基础API mas_makeConstraints()    添加约束 mas_remakeConstraints()  移除之前的约束,重新添加新的约束 mas_updateConst ...

  3. MFC_1.1 基本知识

    如何创建一个MFC项目 选择 MFC 应用程序进行创建,不要使用非英文名 选择对话框风格进行编写 可以通过自定义的设置修改类名 MFC 的基本知识 MFC 是纯面向对象的编程,是 SDK 经过 C++ ...

  4. day21-2 类的派生

    目录 类的派生 派生方法一 派生方法二 类的派生 派生:子类中新定义属性的这个过程叫做派生 派生方法一 指明道姓访问某一个类的函数:该方法与继承无关 class People: def __init_ ...

  5. 【转载】Java下利用Jackson进行JSON解析和序列化

    参考资料: https://blog.csdn.net/sdut406/article/details/85647982 Java下常见的Json类库有Gson.JSON-lib和Jackson等,J ...

  6. TWaver矢量小试——Android演进路线图

    还有半个多月就到春节了,年底相信很多公司都会进行年度总结以及公司发展状况总结,在这过程中难免会用到RoadMap,在这我们也使用TWaver的矢量部分绘制一个Android系统的发展历程.先看效果:什 ...

  7. 【INSERT】逐行提交、批量提交及极限提速方法

    在Oracle数据库中,不是提交越频繁越好.恰恰相反,批量提交可以得到更好的性能.这篇文章给大家简单展示一下在Oracle数据库中逐行提交于批量提交两者之间的性能差别.最后再给出一种可以极大改变性能的 ...

  8. 题解 洛谷P3203/BZOJ2002【[HNOI2010]弹飞绵羊】

    裸的LCT,关键是要怎么连边,怎么将这种弹飞关系转化成连边就行了. 那么我们可以这样连边: 一个节点i的爸爸就是i+ki. 没有i+ki那么就被弹飞了,即\(i\)的爸爸是虚拟节点n+1. 那么怎么求 ...

  9. acm相关(纯转载)

    我觉得很好的文章,之所以放随笔是为了让大家看到这些优秀的博文 acm如何起步 acm重点题型 动态规划题目总结 背包九讲阅读网站

  10. Navicat for MySQL(Ubuntu)过期解决方法

    推荐购买正版软件,尊重版权  [官网在这里] Navicat for MySQL(Ubuntu系统)免费版试用过期解决方法: Step1. 直接删除 /home目录下的  .navicat文件夹(64 ...