const成员函数调用的区别!该怎么处理

const成员函数调用的区别!
代码如下:
C/C++ code

#include <string>
#include <iostream>
using namespace std;
class Sales_item{
    public:
        int func(Sales_item &si)const;
        int func(Sales_item &si);
        Sales_item():ival(1){
        }
    private:
        int ival;
};
int Sales_item::func(Sales_item &si)const{
    
    return ival;
}
int Sales_item::func(Sales_item &si){
    ival=10;
    return ival;
}
int main(){
    Sales_item si1;
    cout<<si1.func(si1)<<endl;//非const对象调用非const函数
    const Sales_item si2;
    cout<<si2.func(si1)<<endl;//const对象调用const函数
    system("pause");
    return 0;
}


  在类中实现const的重载,用非const对象默认调用的是非const成员,如何让非const对象调用const成员呢!
在调用中如何区分调用的const成员和非const成员!const重载只有const的有无的区别,但是在调用中又体现不出成员函数是否有const修饰!!


------解决方案--------------------
const_cast
------解决方案--------------------
const_cast<const Sales_item&>(si1).func(si1)
------解决方案--------------------
static_cast<const Sales_item &>(si1).func(si1)
------解决方案--------------------
呵呵 非常量成员优先调用非常量成员函数! 常量成员只能调用常量成员函数