当这些方法依赖于另一个类时,如何实现类的方法?

时间:2013-07-31 19:35:34

标签: c++ class definitions

我不确定我是否能够直接描述这个问题的所有术语,但这就是我将如何描述我想知道的内容:

假设我有A类,第二个B在其方法中使用A中的数据

class A
     {
     data1
     data2
     etc...
     }

class B
     {
     some_data
     method1 
           {
           // do stuff with some_data and A.data1, A.data2
           }
     method2 
           {
           // do other stuff with some_data and A.data1, A.data2
           }
     }

我很好奇的是,作为一般性,做以下事情被认为是更好的: 1。

class B
     {
     B(A *a) 
           {
           this->a_ptr = a;
           }
     A *a_ptr

     some_data
     method1()
          { 
          // do stuff with a_ptr->data1, a_ptr->data2
          }
     method2()
           {
           // do other stuff  with a_ptr->data1, a_ptr->data2
           }
     }

2

class B
     {
     some_data
     method1(A *a)
          { 
          // do stuff with a->data1, a->data2
          }
     method2(A *a)
           {
           // do other stuff  with a->data1, a->data2
           }
     }

对于使用哪种方法有共识吗?如果是这样,那么选择一种方法而不是另一种方法的原因是什么?

2 个答案:

答案 0 :(得分:0)

返回继承为MrLister评论,否则方法1有对象所有权问题。如果那是不可能的,那么使用方法2,但修改为method(A &a)(或method(const A &a),如果这是意图),以澄清该对象是必需的。

答案 1 :(得分:0)

你所描述的继承似乎是最好的方法。 B类可以操作A类和B类的东西,类似于下面的代码。

从你的评论中你提出一个关于它是一个“是一个”关系的问题。如果你认为A和B之间没有“is-a”关系,那么这些类是相互独立的。您不应该直接操纵另一个类的数据。最好的解决方案是调用A类中的成员函数,以便在B类中获得所需的结果。

class A {
private:
int x,y;
public:
void set_values (int a, int b)
  { x=a; y=b;}
};

class B: public A {
private:
int z;
public:
int GetX ()
  { return x; }
int GetY ()
  { return y; }
int GetZ ()
  { return z; }

};