给OOP专家的一个问题。 - 页 35

 
Реter Konow:

在层次结构中某处有共同根的子类之间如何建立交叉链接?

比如说。F类和Z类是一个继承链的末端环节,在层次结构中有一个共同的根,即A类。

如何从F类中获得Z类的数据或方法?

你不能。没有这样的事情。但没有必要这样做。

创建对象 后,你可以从一个对象传递一个指针到第二个对象,以及从第二个对象传递一个指针到第一个对象。

虽然,如果我们是专门谈论类,你可以通过两个冒号来称呼任何对象。但你需要它做什么呢?当然,有时是需要的,但这是一个极小的OOP特性。

 
Dmitry Fedoseev:

不可能。没有这样的事情。但你不需要这样做。

创建对象 后,你可以把一个对象的指针传给第二个,把第二个的指针传给第一个。

虽然,如果我们是专门谈论类,你可以通过两个冒号来指代任何东西。但你需要它做什么呢?

这完全取决于F类解决的是什么任务。可能会有这样一种情况,在第三方继承链中使用的数据或方法可能是有用的。
 

例子。F类存储颜色和长度方法,Z类存储声音和宽度方法。

出现了一个物体,它有两个属性,长度和宽度,但它们是由不同的F和Z类计算的。该怎么做?创建一个单独的类,重复这些方法,或者我如何访问它们?(带四点的?)。

 
Реter Konow:

例子。F类存储颜色和长度方法,Z类存储声音和宽度方法。

出现了一个物体,它有两个属性,长度和宽度,但它们是由不同的F和Z类计算的。该怎么做?创建一个单独的类,重复这些方法,或者我如何访问它们?(带四点的?)。

你可以创建一个新的类,并将F和Z类包括在其中。

class F{
};

class Z{
};

class Y{
   public:
   F f;
   Z z;
}
 
Dmitry Fedoseev:

你可以创建一个新的类,并在其中包括F和Z类。

弓箭班?明白了,谢谢。
 
Dmitry Fedoseev:

你可以创建一个新的类,并在其中包括F和Z类。

或者你可以在你想要其他类的数据的地方做一个方法,以获得一个 指向所需类的指针。

 
Реter Konow:
一类 "弓"?明白了,谢谢。

你可以直接得到一个你想要的类的指针,然后用这个指针得到一个类对象。但是你必须小心,不要得到一个指向空的或新的类对象的指针。

 
Artyom Trishkin:

你可以简单地获得一个指向所需类的指针,并使用该指针来获得一个类对象。但你必须小心,不要得到一个指向空类对象的指针。

细微之处。我明白了,当数据可以清楚地分类、预先定义和毫不含糊时,继承的层次结构是很方便的。随着对象变得更加复杂,可能会出现类中没有预料到的方法和属性组合,这就需要构建 "绑定"--即类之间的交叉链接。这并不总是很方便,而且可能会破坏漂亮的分配方案,并迫使进行修订。
 
Реter Konow:
一个 "鞠躬 "班?我明白了。哎呀。

在这个例子中

class F{
};

class Z{
};

class Y{
   public:
   F f;
   Z z;
}

Y类包含具有F和Z类类型的变量。

但如果你已经在某处创建并使用了F和Z类的对象,你将无法在对象Y中访问它们。在对象Y中会有两个新的类F和Z的对象。

而要获得对早先创建的、已经使用过的F和Z类对象的访问,你需要在Y类中获得对F和Z类对象的引用--那么Y类就可以用这些已经写在F和Z中的数据进行操作,而不是使用新的、原始的F和Z。

但是,如果你创建了这样一个对象,那么它里面的F和Z会给人以访问类F和Z的机会,而你只能通过类Y来填充它们--同样,从它那里给人以访问对象F和Z的机会,得到一个你需要的对象的指针,并通过指针来处理它。

 
Реter Konow:
细微之处。我明白了,当数据可以清楚地分类、预先定义和毫不含糊时,继承的层次结构是很方便的。随着对象变得越来越复杂,可能会出现并非为类准备的方法和属性的组合,这就需要建立 "绑定"--即类之间的交叉链接。这并不总是很方便,而且可能会破坏美丽的分配方案,并迫使它被修改。

你不需要破坏任何东西--你只需要在类中添加一个方法,给出一个指向另一个类的所需对象的指针。

在最近的文章中,我以这种方式将已经创建并工作的符号集合类对象 和已经积累了数据的当前账户对象的指针传递给交易对象。而贸易阶层处理这些问题时,就像一直拥有这些问题一样。