做购物网站适合的服务器,高端品牌网站建设需要注意什么,上海做网站的,wordpress nova在类中如果我们希望在常函数中修改某属性的值可以使用mutable来实现。 如果有下面的场景#xff0c;假设我们有一个函数hobby()需要在非const的对象调用的时候#xff0c;应该去修改内部的属性#xff0c;在const修饰的对象调用的时候可以满足不修改内部的属性。 鉴于上面的…在类中如果我们希望在常函数中修改某属性的值可以使用mutable来实现。 如果有下面的场景假设我们有一个函数hobby()需要在非const的对象调用的时候应该去修改内部的属性在const修饰的对象调用的时候可以满足不修改内部的属性。 鉴于上面的情况我们即使使用mutable也无法满足因为mutable是让const函数修改属性一旦设置const的对象和非const的对象就都可以修改了并不能像上面那样进行区分。解决方式: 我们可以对于一个函数写两个版本一个是被const修饰的一个是不被const修饰的。这两个函数的函数名一样参数一样内部实现可以相同也可以不同。 当const的对象去调用此函数的时候会调用到const修饰的版本这样就不会修改属性。 当非const的对象去调用函数的时候会调用到非const修饰的版本这样就可以修改属性。 当然我们同一个函数实现两个版本可能会重复写两段相同的代码只是const和非const的区别所以如果不是特殊需求还是写一个就行。(根据情况确定是否设定为const)
例子
#include iostream
#include stringclass People {
private:std::string m_hobby;
public:People(const std::string other): m_hobby(other) {}std::string hobby() {m_hobby 看电视;return m_hobby;}std::string hobby() const{return m_hobby;}
};int main() {People p(学习);p.hobby();const People p1(学习);p1.hobby();std::cin.get();return 0;
} p1为常对象调用的是hobby的常函数版本 p为普通对象调用的是hobby的普通函数版本。