错误原因:常量成员函数和常量对象不能调用非常量成员函数。
示例1:常量成员函数调用自身非常量成员函数
class Item{public: Item(string str):isbn(str){} void show() const{ cout << this->book() << endl; } string book(){ return this->isbn; }private: string isbn;};int main(int argc, char *argv[]){ Q_UNUSED(argc); Q_UNUSED(argv); Item item("fan"); item.show(); return 0;}
程序运行提示
cout << this->book() << endl;
错误
book()成员函数改成以下定义则正确编译运行
string book() const{ return this->isbn; } 示例2 定义常量对象,并调用非常量方法出错,同上的将book函数改成常量的则编译通过
class Item{public: Item(string str):isbn(str){} string book(){ return this->isbn; }private: string isbn;};int main(int argc, char *argv[]){ Q_UNUSED(argc); Q_UNUSED(argv); const Item item("fan"); cout << item.book() << endl; return 0;}