C:如何确保类成员变量只能在某个方法中修改

C:如何确保类成员变量只能在某个方法中修改,第1张

概述我在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();

目的:
我只想让fun2()能够改变m_important_num的值.

题:
如果fun2()以外的任何方法改变变量,是否可能使编译错误?
一种可能的方法是声明它const以某种方式授权fun2()来改变const变量?这是一个好的解决方案吗?或者他们是更好的解决方案?

次要问题:
尝试做这样的事情是错误的设计吗?

解决方法 排序,附加层:

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();};
总结

以上是内存溢出为你收集整理的C:如何确保类成员变量只能在某个方法中修改全部内容,希望文章能够帮你解决C:如何确保类成员变量只能在某个方法中修改所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1224049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存