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语言最新技术

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

被折叠的 条评论
为什么被折叠?



