C++小问题

2025-05-13 15:28:10
推荐回答(4个)
回答1:

3楼答得很好。
我也来凑凑热闹。

首先,常量对象是只能调用可访问的常量成员(函数或数据)。
假设如果常量对象可以访问非const成员,那么如果这个成员可能会修改对象的数据,就违反了常量对象这个定义了。所以它是不允许访问非const成员的。

其次,非常量对象可以访问常量和非常量成员。这个很容易理解,说常量指针与静态成员函数的时候也说过,和这个道理差不多。至于如何访问到常量成员函数呢,我还不知道。

最后,说一下为什么要写两个这样的函数,我想这是完全没有必要的,也是非常糟糕的编码。当然也会有这种情况。但这两个函数应该是具有相同的行为(但可以具有不同的实现,展现给用户的应该是同一个效果)。考的就是成员函数与常量成员函数的调用吧,如同静态成员函数一样。

回答2:

重载函数性质上是不能用const和非const来区分的,它只能以参数的个数、类型或者顺序进行重载.
const调用为常函数,a2.print()是不能被调用的.

回答3:

这里应该有优先级设置吧,非const对象优先使用非const成员函数,如果没有对应的非const成员函数,就看是否有对应的const成员函数了。应该是这样,个人臆测,不足为凭。而const对象只能调用const成员函数。
等待高手解答!

回答4:

1 常对象只能调用常成员函数
2 const关键字可以被用于参与对重载函数的区分

这一点是在常对象 那部分提到的

来自《c++面向对象程序设计教程 (第二版)》 清华大学出版社
P100-P104
——————————————————————
该程序在vc++6.0下...对于普通对象a1 使用‘.’调用 只能调用普通成员函数..若将类中的普通成员函数注释掉,.. .a1才调用常函数....想法同2楼...期待高手....我去问问老师.....