常量函数由非常量对象调用.为什么



我是c++的新手,面临着常量对象的问题。我已经声明了一个名为函数的常量成员函数(正如我所了解到的,常量函数只能由常量对象调用(,但在这里,正则对象调用常量对象。请解释为什么会发生这种情况。代码在这里

myClass.h

#ifndef MYCLASS_H
#define MYCLASS_H
class myClass
{
public:
void function() const;  
};
#endif

myClass.cpp

#include "myClass.h"
#include<iostream>
using namespace std;
void myClass::function() const{
cout<<"this is a constant object";
}

main.cpp

#include <iostream>
using namespace std;
#include "myClass.h"
int main() {
myClass obj;
obj.function();
return 0;
}

请帮帮我。感谢

这就是C++的工作方式。在非常量对象上调用常量成员函数是可以的,因为常量的正确性不能以这种方式破坏。不好的是在const对象上调用一个非常数成员函数。

请注意,如果您有一个function()的非常量重载,则会调用该重载。

因为我了解到常量函数只能由恒定目标

不!

相反

  • const成员函数承诺只读取对象,因此即使在无法更改的情况下也可以调用它
  • 一个非常数成员函数(假设称为"MF"(可以读取和修改对象,因此:

    • 它也不能从const成员函数(比方说被称为"CMF"(调用:函数调用的函数(这里是"CMF(不应该违背承诺,"MF"会有违背承诺的风险
    • 它不能在const对象上调用,const对象在构造完成和销毁之前都是常量(在构造过程中,声明为const的对象还不是常量,因为构造函数需要设置它(

因此const限定的成员函数可以应用于任何对象;限制是这些const成员函数可以调用的内容。

最新更新