const函数和const对象

本文详细解析了C++中const函数和const对象的作用,重点讲解了它们如何限制对成员变量的修改和对非const成员函数的调用。通过实例展示了在WatchData和StandData类中的应用,并揭示了在main函数中的使用误区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const函数和const对象

  • const修饰函数时,表明该函数不能修改成员变量
  • const修饰对象时,表明该对象不能引用成员中非const的成员函数
#include <iostream>
#include <mutex>

using namespace std;

/*
 * 1. const成员函数不能修改成员变量
 * 2. const对象不能引用非const成员函数
 * */

class WatchData {
public:
    WatchData() = default;
    ~WatchData() = default;

    virtual int GetData() const  {
        return m_index;
    }
    // 函数后面的const是修饰所有的成员变量在该函数中为const
    /*void SetData(int &&idx) const {  // error: assignment of member ‘WatchData::m_index’ in read-only object
        m_index = idx;
    }*/

    virtual void SetData(int &&idx) {
        m_index = idx;
    }

private:
    int m_index{};
};

class StandData : public WatchData {
public:
    StandData() = default;
    ~StandData() = default;
    int GetData() const override {
        return m_index;
    }
    // 函数后面的const是修饰所有的成员变量在该函数中为const
    /*void SetData(int &&idx) const {  // error: assignment of member ‘WatchData::m_index’ in read-only object
        m_index = idx;
    }*/

    void SetData(int &&idx) override {
        m_index = idx;
    }

private:
    int m_index{};
};

int main(int argc, const char** argv) {

    WatchData watchData{};
    watchData.SetData(6);
    cout << watchData.GetData() << endl;
    // const 对象不能引用非const的成员函数
    const WatchData *pWatchData = &watchData;
    //  pWatchData->SetData(4);  error: passing ‘const WatchData’ as ‘this’ argument discards qualifiers [-fpermissive]
    StandData standData{};
    standData.WatchData::SetData(43);
    cout << standData.WatchData::GetData() << endl;

    cout << "test" << endl;
    return 0;
}

关注公众号一起学习C/C++/go语言最新技术
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Achilles.Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值