C++常量(const)的使用
#include <iostream> using namespace std; class MyClass
{
public:
int GetValue() const ;
int GetValue()
{
return x + y;
}
int GetMax()
{
return x > y ? x : y;
}
int GetMin() const
{
//p += 3;//错误,常函数成员不能更新数据
return x < p ? x : y; //正确,p可以被使用
}
static void Display(const int &r)
{
cout << "所引用的对象为" << r << endl;
}
static void Display_no_const(int &r)
{
cout << "所引用的对象为" << r << endl;
}
MyClass(int a, int b) :x(a), y(b) //构造函数只能通过列表初始化的形式对常量成员进行初始化
{
cout << z << "<<<<";
}
const int z = ;//定义时进行初始化,不需要在构造函数中进行初始化
private:
int p = ;
const int x, y; }; int MyClass::GetValue() const
{ return x * y;
} int main(void)
{
const MyClass m1(, );
MyClass m2(, );
const int i = ;
int j = ;
// m1.z++; 错误,不能给常量赋值
cout << m1.GetValue() << "<- first one" << endl;
cout << m2.GetValue() << "<- second one\n";
//m1.GetMax(); //错误,不能用常对象调用非常函数成员
cout << m1.GetMin() << endl;
//cout << m1.z; MyClass::Display(i);
MyClass::Display(j); //可以从“int”转换为“const int &” // MyClass::Display_no_const(i); //错误, 无法将参数 i 从“const int”转换为“int &”
return ;
}
/*常量的总结:
1.常数据类型(const int i = 0;): 定义时就要初始化。
2.类中的 常对象(const MyClass m1(2, 3);):常对象一旦被定义即表示对象的成员也变成常类型, 即不能对其修改
若要修改需要加关键字 mutable 修饰
3.类中的 常数据成员:在类的实例化对象时,由于定义类时的数据成员为常数据类型,故需要在实例化对象时进行初始化
常数据成员,即通过构造函数初始化列表的方式实现,也可在定义类的常数据成员时进行初始化。常数据成员一样也不可以修改。
4.类中的 常函数成员:可以实现函数的重载(如:GetValue()的重载);
常成员函数可以修改静态数据成员,因为静态数据不属于对象,而是类的属性。
还可以修改全局变量,其他对象的成员变量,被 mutable 修饰的成员变量;
不能更新任何数据成员;
不能调用非常函数成员;
5.常引用(const int &r):常引用所引用的对象不能被修改;
*/
C++常量(const)的使用的更多相关文章
- 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const
C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...
- 宏(define)与常量(const)
http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=402470669&idx=1&sn=e34db91190d8d46f ...
- 常量Const
常量Const YEAR = 2019 # 全部大写的变量名为常量 注释 给不能理解的写一个描述 便于理解 增强可读性 三种形式 单行(当行)注释:# 只注释一行 不能换行 注释的代码不执行 不使用 ...
- 石川es6课程---3、变量let和常量const
石川es6课程---3.变量let和常量const 一.总结 一句话总结: let非常好用,尤其是let的块级作用域可以解决之前要(function(){})()立刻执行函数做的块级作用域 1.js中 ...
- #define 和常量 const 的区别
const 后的常量,程序对其中只能读不能修改. #include <iostream> using namespace std; int main() { const double pi ...
- iOS 宏(define)与常量(const)的正确使用
在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰 你能区分下面的吗?知道什么时候用吗? #define HSCoder @ ...
- OC中修饰符:宏define 常量:const extern
const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...
- c#基础--常量(const),只读字段(readonly)
1.0:常量 常量被关键字const 所修饰 我们来看看常量的demo class Program { static void Main(string[] args) { const string n ...
- in C#,编译型常量(const)和运行时常量(readonly)
readonly 关键字与 const 关键字不同. const 字段只能在该字段的声明中初始化. readonly 字段可以在声明或构造函数中初始化. 因此,根据所使用的构造函数, readonly ...
- 【转】iOS 宏(define)与常量(const)的正确使用-- 不错
原文网址:http://www.jianshu.com/p/f83335e036b5 在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与c ...
随机推荐
- 模拟ArrayList
package com.helloidea; import java.util.ArrayList; import java.util.Collection; import java.util.Lis ...
- 爬虫入门之handler与opener(三)
1 自定义opener opener是 urllib.request.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的模块构建好的opener 但是基本的ur ...
- GBase数据库——常用命令
针对GBase 8a 版本 1数据库操作与维护 1.1数据库启停 [root@OMMB-66-V10-001 ~]# service gcware stop Stopping GCMonit succ ...
- SpringBoot 启动参数设置环境变量、JVM参数、tomcat远程调试
java命令的模版:java [-options] -jar jarfile [args...] 先贴一下我的简单的启动命令: java -Xms128m -Xmx256m -Xdebug -Xrun ...
- CRM中间件里的CSA队列有什么用
我们有时候会在中间件的事务码SMQ2即Inbound队列查看器里观察到以CSA开头的队列: 这些队列的作用是什么呢?在SAP community上已经有很多朋友提出了相同的问题,也有专家在下列两个连接 ...
- 笔记本win8系统共享wifi上网方法
华硕笔记本电脑,安装了win8系统,使用wifi上网,由于连接无线路由的机器太多,超过路由连接数上限,因此转为使用笔记本共享wifi方式给手机上网. 最终上网方式为: 笔记本网卡接入无线路由器上网,笔 ...
- IOS Xib使用
- transform,animate
1.transform 用来定义变换 IE10及以上支持 示例:transform: rotate | scale | skew | translate |matrix; 一.旋转rotate 正数 ...
- ProjectServer任务审批后自动发布
我们知道ProjectServer汇报工时的顺序是这样: 1.项目成员打开自己的时间表,选择要汇报的任务,在汇报工时栏填写实际工时. 2.汇报工时后点击保存. 3.将汇报工时的任务提交给项目经理. 4 ...
- Restrramework源码(包含组件)分析
1.总体流程分析 rest_framework/view.py 请求通过url分发,触发as_view方法,该方法在ViewSetMixin类下 点进去查看as_view源码说明,可以看到它在正常情况 ...