C:如何确保类成员变量只能在某个方法中修改
发布时间:2020-12-16 06:46:19 所属栏目:百科 来源:网络整理
导读:我在MacOS Sierra上使用C 14和clang.我想按设计强制执行规则.以下是规则. 我班上有一个成员变量说: unsigned int m_important_num; 我班有四种方法. fun1();fun2();fun3();fun4(); 目的: 我只想让fun2()能够改变m_important_num的值. 题: 如果fun2()以外
我在MacOS Sierra上使用C 14和clang.我想按设计强制执行规则.以下是规则.
我班上有一个成员变量说: unsigned int m_important_num; 我班有四种方法. fun1(); fun2(); fun3(); fun4(); 目的: 题: 次要问题: 解决方法
排序,附加层:
class S1 { public: void fun2() { /*Modify m_important_num */ } unsigned int getImportantNum() const { return m_important_num;} private: unsigned int m_important_num; }; class S2 : private S1 { public: void fun1(); using S1::fun2; // or void fun2() {S1::fun2();} void fun3(); void fun4(); }; 正如Yakk评论的那样,如果func2需要访问S2成员,CRTP可以解决这个问题: template <typename Derived> class S1 { public: void fun2() { asDerived().foo3(); /*Modify m_important_num */ } unsigned int getImportantNum() const { return m_important_num;} private: Derived& asDerived() { return stataic_cast<Derived&>(*this); } private: unsigned int m_important_num; }; class S2 : private S1<S2> { // friend class S1<S2>; // If required. public: void fun1(); using S1::fun2; // or void fun2() {S1::fun2();} void fun3(); void fun4(); }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |