我有一个名为myClass
的小组:
myClass
{
int myFunction1();
int myFunction2();
private:
int A;
int B;
};
在myFunction1
中,A不应该改变,但B可以改变。
在myFunction2
中,B不应该改变,但A可以改变。
有没有办法为每个功能灵活const
?
ie const B
表示function1,反之亦然。
答案 0 :(得分:2)
这不容易实现。您可以声明一个方法const
,它将生成所有变量const
。您可以声明成员mutable
,以便即使在const
函数中也可以对其进行变更。但是,您不能仅将成员mutable
声明为某些方法。
但问题是:你为什么要那样?只需不要在方法中更改A
。由于该方法在同一个文件中,因此记住它应该不会太难。
如果您确实需要对A
和B
进行单独封装,即使在类中,也要为它们使用自己的类并将方法移动到类中,例如:
class MyClass {
private:
AContainer A;
BContainer B;
public:
void myFunction1(){ B.myFynction1(A.get()); }
void myFunction2(){ A.myFunction2(B.get()); }
class BContainer {
int B;
public:
int get(){ return B;}
myFunction1(int A); // May only change B, A is provided as parameter
}
class AContainer {
int A;
public:
int get(){ return A;}
myFunction2(int B); // May only change A, B is provided as parameter
}
}
答案 1 :(得分:2)
如果您真的需要实现这种行为,您可以将int
包装到与特定功能相关的类中,同时提供获取/设置访问权限(非常简单,缺少所有功能)必要的实用程序 - 只是为了说明这一点):
class TIntA{
public:
TIntA(int _i) : m_data(_i) {}
// this function will be able to modify the m_data member but other
// functions will have to use the get()
friend int myClass::myFunction1();
int get() const {return m_data;}
private:
int m_data;
};
我确定你可以用模板进一步概括这种方法(你能提供一个函数作为模板参数吗?如果是这样你可以使这个类完全通用)