#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. 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const

    C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...

  2. 宏(define)与常量(const)

    http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=402470669&idx=1&sn=e34db91190d8d46f ...

  3. 常量Const

    常量Const YEAR = 2019 # 全部大写的变量名为常量 注释 给不能理解的写一个描述 便于理解 增强可读性 三种形式 单行(当行)注释:# 只注释一行 不能换行 注释的代码不执行 不使用 ...

  4. 石川es6课程---3、变量let和常量const

    石川es6课程---3.变量let和常量const 一.总结 一句话总结: let非常好用,尤其是let的块级作用域可以解决之前要(function(){})()立刻执行函数做的块级作用域 1.js中 ...

  5. #define 和常量 const 的区别

    const 后的常量,程序对其中只能读不能修改. #include <iostream> using namespace std; int main() { const double pi ...

  6. iOS 宏(define)与常量(const)的正确使用

    在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与const修饰 你能区分下面的吗?知道什么时候用吗? #define HSCoder @ ...

  7. OC中修饰符:宏define 常量:const extern

    const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...

  8. c#基础--常量(const),只读字段(readonly)

    1.0:常量 常量被关键字const 所修饰 我们来看看常量的demo class Program { static void Main(string[] args) { const string n ...

  9. in C#,编译型常量(const)和运行时常量(readonly)

    readonly 关键字与 const 关键字不同. const 字段只能在该字段的声明中初始化. readonly 字段可以在声明或构造函数中初始化. 因此,根据所使用的构造函数, readonly ...

  10. 【转】iOS 宏(define)与常量(const)的正确使用-- 不错

    原文网址:http://www.jianshu.com/p/f83335e036b5 在iOS开发中,经常用到宏定义,或用const修饰一些数据类型,经常有开发者不知怎么正确使用,导致项目中乱用宏与c ...

随机推荐

  1. windows网络命令汇总

    分类: 网络技术2011-10-26 09:43 2557人阅读 评论(0) 收藏 举报 windows网络路由器dns服务器internetinterface Ping命令: ping命令通过发送I ...

  2. JavaScript模块化编程之AMD - requireJS基础使用

    JavaScript模块化编程之AMD requireJS基础使用 标签(空格分隔): JavaScript 参考文章 AMD规范 AMD是"Asynchronous Module Defi ...

  3. 用C++实现HTTP服务器 - Windows平台(开放源代码)

    有时间了看一下 https://blog.csdn.net/querw/article/details/6593328 libevent也实现了一下http服务

  4. csu 1965

    Description You are a boss who has N employers. One day, you have a message and you want to tell it ...

  5. 【[JSOI2007]文本生成器】

    \(AC\)机上的计数\(dp\)啊 并没有想到反着求出不合法的串的个数,直接正面硬上 设\(dp[i][j][0/1]\)表示匹配出的长度为\(i\),在\(AC\)机上位置为\(j\),没有/有匹 ...

  6. 2018.10.31 Mac下的Mysql修改字符编码修改的问题总结

    今天在弄数据库的时候发现存入中文汉字变成了问号,Mac跟windows处理方式不一样. show variables like '%char%'; 查看当前mysql的编码格式 也就是默认编码格式 + ...

  7. LocalDB的奇怪问题

    属性 MasterDBPath 不可用于 信息“Microsoft.SqlServer.Management.Smo.Information”.该对象可能没有此属性,也可能是访问权限不足而无法检索. ...

  8. ROS indigo安装完成后运行小乌龟示例程序

    安装ROS成功后,在Beginner Tutorials中有一个简单的示例程序. 在Terminal中运行以下命令:$ roscore新开一个terminal,运行以下命令,打开小乌龟窗口:$ ros ...

  9. 微信小程序【消息推送服务器认证C# WebAPI】

    参考微信开发文档: https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/callback_help.html 代码可用 /// ...

  10. css3中有关transform的问题

    Transform属性应用于元素的2D或3D转换.这个属性允许你将元素旋转,缩放,移动,倾斜等.