0

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

假设我有 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
           }
     }

是否就使用哪种方法达成共识?如果是这样,选择一种方法而不是另一种方法的原因是什么?

4

2 回答 2

0

从您所描述的情况来看,继承似乎是最好的方法。B 类将能够操作 A 类和 B 类的东西,类似于下面的代码。

从您的评论中,您提出了一个关于它是“is-a”关系的问题。如果您不认为 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; }

};

于 2013-08-01T00:09:06.440 回答
0

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

于 2013-07-31T19:44:02.423 回答