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 ...
随机推荐
- pthread_create & pthread_exit
http://www.cppblog.com/saha/articles/189802.html 1. pthread_create #include <pthread.h> ...
- SQLServer用存储过程实现插入更新数据
实现 1)有同样的数据,直接返回(返回值:0): 2)有主键同样,可是数据不同的数据,进行更新处理(返回值:2): 3)没有数据,进行插入数据处理(返回值:1). [创建存储过程] Create pr ...
- LA 3353 最优巴士线路设计
给出一个 n 个点的有向图,找若干个圈,是的每个结点恰好属于一个圈.要求总长度尽量小. 三倍经验题 Uva 12264,HDU 1853 这题有两种解法,一是匹配: 每个点只在一个圈中,则他有唯一的前 ...
- Spring data jpa命名规范
JPA命名规范 (sample与JPQL等效) Table 4. Supported keywords inside method names Keyword Sample JPQL snippet ...
- php new self()关键字的用法
今天开框架源码,发现有用到new self()的用法 有点不懂 在网上查了一下,给大家说一下: 在类中 self的用法 和this的用法差不多 , php new self() 一般在类内部使用 ...
- js 注册控件的onclick事件
今天做了一个全选功能:1.点击全选,全部选中.选中状态再点击全选,全部取消选中2.点击成员,判断是否成员全部选中,true:全选为选中状态,false:全选为未选中状态. 使用js是比较麻烦的就是如何 ...
- 動態SQL運用實例
動態SQL運用實例 語法8.1.6之前: EXECUTE IMMEDIATE dynamic_sql_string [INTO {define_var1 [, define_var2] ... | p ...
- @font-face css3自定义个性化字体
使用第三方平台转换字体文件为font-face所支持的格式. TureTpe(.ttf)格式 支持浏览器:IE9+,Firefox3.5+,Chrome4+,Safari3+,Opera10+,iOS ...
- dropload上拉加载更多
<link href="~/Scripts/dropload/dropload.min.css" rel="stylesheet" /> <s ...
- 编写可维护的JavaScript之编程风格
在团队中只有每个人的编程风格一致,大家才能方便的互相看懂和维护对方的代码. 1. 层级缩进 对于层级缩进目前有两种主张:1)使用制表符这种方法有两种好处,第一,制表符和缩进层级之间是一一对应关系,符合 ...