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. Python+selenium学习(二) selenium 定位不到元素

    转载:https://www.cnblogs.com/tarrying/p/9681991.html tarrying selenium的三种等待时间 //隐式等待(20秒以内没哥一段时间就会去找元素 ...

  2. bootstrap datatable 数据刷新问题

    在项目中,页面初始化的时候,通过通过向后台请求数据,页面初始化完之后,datatable是有数据的,当我点击页面的搜索按钮(按照时间过滤数据),datatable的数据要能重新刷新或者重载:这一点,我 ...

  3. Controller传值到前端页面的几种方式

    一丶追加字符串传值 #region 02-追加字符串传值 /// <summary> /// 02-追加字符串传值 /// </summary> /// <returns ...

  4. xmpp登录(2)

    XMPP中常用对象们: XMPPStream:xmpp基础服务类 XMPPRoster:好友列表类 XMPPRosterCoreDataStorage:好友列表(用户账号)在core data中的操作 ...

  5. 03匿名内部类、eclipse快捷键、String相关知识

    03匿名内部类.eclipse快捷键.String相关知识-2018.7.11 1.匿名内部类(只针对重写一个方法时候使用,不能向下转型,因为没有子类类名) new Inter(){ public v ...

  6. JDK的下载---官方

    1.去到官方网站 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 根据箭头选择, ...

  7. 面试总结——Java高级工程师(一)

    一.无笔试题 不知道是不是职位原因还是没遇到,面试时,都不需要做笔试题,而是填张个人信息表格,或者直接面试 二.三大框架方面问题 1.Spring 事务的隔离性,并说说每个隔离性的区别 解答:spri ...

  8. Python3.0科学计算学习之类

    类: Python中的类是一个抽象的概念,甚至比函数还要抽象.可以把它简单的看作是数据以及由存取.操作这些数据的方法所组成的一个集合.类是Python的核心概念,是面向对象编程的基础. 类有如下的优点 ...

  9. 分金币 (UVA 11300)

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33899 思路:推公式,发现可以转化为求给定n个数,求到所有点距离之和最小的点 ...

  10. ebay 店铺状态

    OrderStatusCodeType @XmlEnumValue("Active") @XmlEnumValue("Inactive") @XmlEnumVa ...