只有一个类方法/变量可以从另一个类访问?

时间:2012-01-02 23:55:37

标签: c++ class methods

我有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

我希望我能够充分解释我的问题,让你能够满足我的需求。提前谢谢!

4 个答案:

答案 0 :(得分:3)

您可以将设置者声明为protectedprivate,然后将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;
}