C++ const常量对象、常量成员函数和常引用
微信公众号:「小林coding」
用简洁的方式,分享编程小知识。
01 常量对象
如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字
class CTest
{
public:
void SetValue() {}
private:
int m_value;
};
const CTest obj; // 常量对象
02 常量成员函数
在类的成员函数后面可以加const关键字,则该成员函数成为常量成员函数。
- 在常量成员函数中不能修改成员变量的值(静态成员变量除外);
- 也不能调用同类的 非 常量成员函数(静态成员函数除外)
class Sample
{
public:
void GetValue() const {} // 常量成员函数
void func(){}
int m_value;
};
void Sample::GetValue() const // 常量成员函数
{
value = 0; // 出错
func(); // 出错
}
int main()
{
const Sample obj;
obj.value = 100; // 出错,常量对象不可以被修改
obj.func(); // 出错,常量对象上面不能执行 非 常量成员函数
obj.GetValue // OK,常量对象上可以执行常量成员函数
return 0;
}
03 常量成员函数的重载
两个成员函数,名字和参数表都一样,但是一个是const,一个不是,那么是算是重载。
class Sample
{
public:
Sample() { m_value = 1; }
int GetValue() const { return m_value; } // 常量成员函数
int GetValue() { return 2*m_value; } // 普通成员函数
int m_value;
};
int main()
{
const Sample obj1;
std::cout << "常量成员函数 " << obj1.GetValue() << std::endl;
Sample obj2;
std::cout << "普通成员函数 " << obj2.GetValue() << std::endl;
}
执行结果:
常量成员函数 1
普通成员函数 2
04 常引用
引用前面可以加const关键字,成为常引用。不能通过常引用,修改其引用的变量的。
const int & r = n;
r = 5; // error
n = 4; // ok!
对象作为函数的参数时,生产该对象参数是需要调用复制构造函数的,这样效率就比较低。用指针作为参数,代码又不好看,如何解决呢?
可以用对象的引用作为参数,防止引发复制构造函数,如:
class Sample
{
...
};
void Func(Sample & o) // 对象的引用作为参数
{
...
}
但是有个问题,对象引用作为函数的参数有一定的风险性,若函数中不小心修改了形参0,则实参也会跟着变,这可能不是我们想要的,如何避免呢?
可以用对象的常引用作为参数,如:
class Sample
{
...
};
void Func(const Sample & o) // 对象的常引用作为参数
{
...
}
这样函数中就能确保不会出现无意中更改o值的语句了。
C++ const常量对象、常量成员函数和常引用的更多相关文章
- 用 const 限定类的成员函数
类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于 ...
- [转载]能不能同时用static和const修饰类的成员函数?
题目(一):我们可以用static修饰一个类的成员函数,也可以用const修饰类的成员函数(写在函数的最后表示不能修改成员变量,不是指写在前面表示返回值为常量).请问:能不能同时用static和con ...
- .static 和const分别怎么用,类里面static和const可以同时修饰成员函数吗。
static的作用: 对变量: 1.局部变量: 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量. 1)内存中的位置:静态存储区 2)初始化:局部的静态变量只能被初始化一次, ...
- 【转】C++ const成员变量和成员函数(常成员函数)
转:http://c.biancheng.net/view/2230.html 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. co ...
- C++ const成员变量和成员函数(常成员函数)
在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. const成员变量 const 成员变量的用法和普通 const 变量的用法相似,只 ...
- c++ 常成员函数 和 常对象
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zhuyingqingfen/article/details/31751111 先明白几个概念: 1. ...
- const关键字对C++成员函数的修饰
const对C++成员函数的修饰分为三种:1. 修饰参数:2. 修饰返回值:3. 修饰this指针.简述一下知识点如下,以后找功夫再完善. 1. 对函数参数的修饰. 1)const只能用来修饰输入参数 ...
- C++ 类 & 对象-类成员函数-类访问修饰符-C++ 友元函数-构造函数 & 析构函数-C++ 拷贝构造函数
C++ 类成员函数 成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义. 需要强调一点,在 :: 运算符之前必须使用类名.调用成员函数是在对象上使用点运算符(.),这样它就能操作与 ...
- C++中const对象和非const对象调用成员函数问题
一.类MyClass 二.主函数调用 三.结果
随机推荐
- java遍历request.getParameterMap()中的值
在开发过程中发现request对象有提供一个request.getParameterMap()方法可以获取到从前端请求发送的参数Map. 但是在使用get()方法通过key(键)去获取这个参数Map中 ...
- Java题库——Chapter2 基础程序设计
1)Suppose a Scanner object is created as follows: Scanner input = new Scanner(System.in); What metho ...
- PAT 1011 World Cup Betting 查找元素
With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...
- Selenium(十九):unittest单元测试框架(五) Page Object设计模式
1. Page Object设计模式 Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现在对界面交互细节的封装,这样可以使测试方案更关注于业务而非界面细节.从 ...
- Java生鲜电商平台-商城优惠券设计要点复盘与总结
Java生鲜电商平台-商城优惠券设计要点复盘与总结 Java生鲜电商平台本文将从优惠券设计用户端,需求端,业务流程全方案解析优惠券设计方案 为什么要设计优惠券 设计优惠券的核心:拉新和促活 新产品上线 ...
- SSM框架之Mybatis(7)延迟加载、缓存及注解
Mybatis(7)延迟加载.缓存及注解 1.延迟加载 延迟加载: 就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. **好处:**先从单表查询,需要时再从关联表去关 ...
- 编译原理之不懂就问-First集
老师PPT: 这条语言实在是..通俗易懂
- RAID&LVM有关磁盘的故障
目录 RAID&LVM有关磁盘的故障 RAID 注意:RAID硬盘失效处理--热备和热拔插 RAID实战 LVM介绍 磁盘故障 RAID&LVM有关磁盘的故障 RAID 好处:1.更多 ...
- VirtualBox设置自动适应屏幕
设备 --> 安装增强功能 等待安装完成,就能自动适应屏幕大小了
- HTML标记一览表
