我有A类和B类.A类有一堆带有gets / sets的变量,但我只想从B类调用这些集合。我能想到这样做的唯一方法是保护集合并从A类派生出B类。但是B类最终会从A类继承一堆不必要的东西。
示例:
class A {
public:
void setHealth();
int getHealth();
private:
int health;
};
class B {
public:
void someMethod() { classAInstance.setHealth(); } //This should work
private:
A classAInstance;
};
A classAInstance;
classAInstance.setHealth(); //This should not work because its not being called from Class B
我希望我能够充分解释我的问题,让你能够满足我的需求。提前谢谢!
答案 0 :(得分:3)
您可以将设置者声明为protected
或private
,然后将B
声明为friend
A
:
class A {
friend class B;
...
};
有关详细信息,请参阅C ++常见问题解答:http://www.parashift.com/c++-faq-lite/friends.html。
答案 1 :(得分:1)
如果您希望对A的所有访问都通过B并强制B不访问私有数据 没有经过A的set- / get-成员函数......你可以做这样的事情(即使它不必要地复杂化):
class A
{
friend class B;
void setValue(const int &value) { aData.x = value; }
int getValue() const { return aData.x; }
class AData
{
friend class A;
int x;
};
AData aData;
};
class B
{
public:
int getValue() const { return a.getValue(); }
void setValue(const int &value) { a.setValue(value); }
private:
A a;
};
答案 2 :(得分:0)
您可以将课程B
设为A
的朋友:
class B;
class A {
friend class B;
// ...
};
答案 3 :(得分:0)
让B
成为friend
A
,从而允许其访问A
的私人(和受保护)成员:
class A {
friend class B;
}