我是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成员函数可以调用的内容。