const与static类成员
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类成员的更多相关文章
- static 类成员变量 和 static const类成员变量
1.使用static类的优点: (1)避免与其他类的成员或者全局变量冲突 (2)可以封装 (3)阅读性好 2.static 数据成员独立于该类的任意对象而存在 static数据成员的类型可以是该成员所 ...
- C++中static类成员
static局部变量 static局部变量确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化 这种对象一旦被创建,在程序结束前不会被撤销.在该函数被多次调用的过程中,静态局部对象会持续存在 ...
- static类成员(变量和函数)
0. 使用背景 对于特定类类型的全体对象而言,访问一个全局对象有时是必要的.也许,在程序的任意点需要统计已创建的特定类类型对象的数量:或者,全局对象可能是指向类的错误处理例程的一个指针:或者,它是指向 ...
- 12.3——类作用域,构造函数,友元,static类成员
类作用域: (1)成员函数在类外定义时,因为函数体还有形参列表都出现在成员名之后,都是在类作用域内定义,所以不用加域作用符 来引用其他的成员. (2)函数的返回值不一定需要在类的作用域中,但是若是返回 ...
- C++ static类成员,static类成员函数
转载:ZJE_ANDY static修饰类中成员,表示类的共享数据 1.static类成员 C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处 ...
- C++之static类成员,static类成员函数
0.static修饰类中成员,表示类的共享数据 1.static类成员 在C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处在.static类 ...
- .static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗。
static的作用: 对变量: 1.局部变量: 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量. 1)内存中的位置:静态存储区 2)初始化:局部的静态变量只能被初始化一次, ...
- 【转】C++的const类成员函数
我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误.例如, const char blank=' '; blank='\n'; //错误 面向对象程序设计中 ...
- [UE4]C++的const类成员函数
我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误.例如: const char blank = ‘’; blank = ‘\n’; // 错误 要声明一个 ...
随机推荐
- Laravel 网站项目目录结构规划
最近在用Laravel这个PHP框架搭网站,大致了解这个框架的目录结构之后感觉学到了不少东西. 首先安装好包管理器: PHP部分当然用composer,安装在全局目录下方便一点. 前端部分,我没有选择 ...
- SDK_进度条和滑块
进度条和滑块 进度条和滑块属于通用控件,通用控件的使用需要加 CommCtrl.h 头文件 如何初始化进度条和滑块的数值范围和默认的位置 // 设置默认的范围值SendDlgItemMessage(h ...
- C语言编辑编译及集成开发环境
C语言编辑编译及集成开发环境 编辑器 在不同的操作系统上使用不同的编辑器,保存源代码文件时,文件名应指出程序的功能扩展名应为.c. 编译器 编译器把源代码编译成机器语言的二进制指令即目标代码生成目标文 ...
- 官方安装docker-ce步骤
这里是Centos7安装方式 安装依赖包 $ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 添加Docker ...
- Python isdigit() 方法检测字符串是否只由数字组成
Python isdigit() 方法检测字符串是否只由数字组成
- jsp中的basePath,获取应用的路径
1 2 3 4 5 String path = request.getContextPath(); String basePath = request.getScheme()+": ...
- cc.Node—场景树
对于cc.Node我分了四个模块学习: 1.场景树,2.事件响应,3.坐标系统,4.Action的使用:在此记录经验分享给大家. 场景树 1: creator是由一个一个的游戏场景组成,通过代码逻辑来 ...
- <MySQL>入门二 增删改 DML
-- DML语言 /* 数据操作的语言 插入:insert 修改:update 删除:delete */ 1.插入 -- 插入语句 /* 语法:insert into 表名(列名...) values ...
- PHP代码静态分析工具PHPStan
最近发现自己写的PHP代码运行结果总跟自己预想的不一样,排查时发现大多是语法错误,在运行之前错误已经种下.可能是自己粗心大意,或者说php -l检测太简单,不过的确是有一些语法错误埋藏得太深(毕竟PH ...
- 回车符号 ‘\r’ 的实际应用
由于最近开始研究自动化测试 首先是自动定时去下载安装包,需要实时显示进度. 于是了解了进度条相关的方法. 作下记录. 区别 \r 表示将光标的位置回退到本行的开头位置 \n 表示光标从下一行的开头位置 ...