【问题标题】:constant function is called by non constant object. Why?常量函数由非常量对象调用。为什么?
【发布时间】:2019-04-21 06:21:23
【问题描述】:

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

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";
}

ma​​in.cpp

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

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

    return 0;
}

请帮帮我。 谢谢

【问题讨论】:

    标签: c++ constants member-functions const-correctness this-pointer


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      据我所知,常量函数只能由 常量对象

      不!

      正好相反

      • const 成员函数承诺只读取对象,因此即使无法更改也可以调用它;
      • 一个非 const 成员函数(比如说“MF”)可以读取和修改对象,所以:

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

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

      【讨论】:

        猜你喜欢
        • 2010-09-29
        • 2019-11-20
        • 2019-02-05
        • 1970-01-01
        • 2013-12-19
        • 2019-07-09
        • 1970-01-01
        • 2018-06-25
        相关资源
        最近更新 更多