博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
const修饰的函数
阅读量:4303 次
发布时间:2019-05-27

本文共 607 字,大约阅读时间需要 2 分钟。

今天笔试遇到一道选择题,大致如下:

class A{	int b;public:	void func()const{		cout << "a" << endl;	}	void func(){		cout << "b" << endl;	}};
则A a; a.func();的结果是什么?a b 还是报错?

我只记得const修饰的函数,可以禁止修改成员函数,也就是说,成员函数此时相当于常量。可是这样重载的函数,会优先调用谁呢?

只有实验才能记得清楚,我调试后发现输出的是b。

可是在考试的时候,并没有电脑让运行,只能用猜的吗?不,可以从重载函数的性质去推断。

重载函数,是指几个函数有相同的标识符,但却对于不同类型参数做出不同的反应,是多态的特性。而这种多态,是编译时期多态,而不是运行期。因为在调用时总能进行类型的判定。所以我可以大胆推断,这个带const修饰的重载函数,也是编译时期决定的。那么它的决定必然有一个因素。

由const修饰符,我们首先想到的是const修饰的变量,那么就可以联想到const修饰的对象。常量修饰的对象,它的成员是不能被外界修改的,因为对外界来说,它是const的。

所以继续推断,之前所说的决定因素,就是这个const:只有常量类型的对象,会调用const的重载函数。

写一段测试代码来验证:

A a;	const A b;	a.func();	b.func();
结果如下:

转载地址:http://ytqws.baihongyu.com/

你可能感兴趣的文章
结对作业(返回一个整数数组中最大子数组的和——数组首尾相接)
查看>>
个人总结
查看>>
iOS 时间选择器禁止选取系统时间之前的时间
查看>>
SQL Server 异常处理机制(Begin try Begin Catch) 摘录
查看>>
二:HTML文本编译器 kindeditor-4.1.10 的使用 SpringMVC+jsp的实现
查看>>
you-get视频下载
查看>>
java实际项目中interface和abstract interface 区别
查看>>
设置checkBox不拦截焦点
查看>>
C#使用xml文档作为数据源 Name cannot begin with the ' ' character, hexadecimal value 0x20
查看>>
enctype="multipart/form-data导致request获取不到数据
查看>>
从源码看java线程状态
查看>>
JavaScript中String对象处理HTML标记中文本的方法
查看>>
Blog开通了.
查看>>
istio-1.1.6镜像列表
查看>>
Unity C#笔记 容器类
查看>>
beta阶段第六次scrum meeting
查看>>
印度的密教经典--古老的祝福
查看>>
学生档案
查看>>
/sys/bus/i2c/devices下的内容与i2c_board_info结构体
查看>>
Python高级正则
查看>>