我不确定我是否能够直接描述这个问题的所有术语,但这就是我将如何描述我想知道的内容:
假设我有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
}
}
对于使用哪种方法有共识吗?如果是这样,那么选择一种方法而不是另一种方法的原因是什么?
答案 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; }
};