3

我是 C++ 的新手,面临常量对象的问题。我已经声明了一个名为function的常量成员函数(据我所知,一个常量函数只能由一个常量对象调用)但是这里一个常规对象调用一个常量对象。请解释为什么会这样。代码在这里

我的类.h

#ifndef MYCLASS_H
#define MYCLASS_H

class myClass
{
    public:
        void function() const;  
};

#endif

我的类.cpp

#include "myClass.h"
#include<iostream>
using namespace std;

void myClass::function() const{
    cout<<"this is a constant object";
}

主文件

#include <iostream>
using namespace std;
#include "myClass.h"

int main() {
    myClass obj;
    obj.function();

    return 0;
}

请帮帮我。谢谢

4

2 回答 2

6

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

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

于 2018-11-18T20:57:58.363 回答
5

正如我所知,一个常量函数只能由一个常量对象调用

不!

反过来

  • const 成员函数承诺只读取对象,因此即使无法更改也可以调用它;
  • 非 const 成员函数(假设称为“MF”)可以读取和修改对象,因此:

    • 不能从 const 成员函数(假设称为“CMF”)调用它:由函数(此处为“CMF”)调用的函数不应违反承诺,而“MF”可能会违反承诺;
    • 它不能在 const 对象上调用,该对象在其构造完成时一直是常量,直到销毁(在构造期间,声明为 const 的对象还不是常量,因为构造函数需要对其进行设置)。

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

于 2018-11-18T23:11:41.403 回答