0

我想把我做的一个类变成一个抽象类并让另一个类来扩展它。这是因为类(粒子)严重依赖于我想要抽象的类(向量)。

我不确定我将如何使用我用 new 关键字实例化的所有这些对象,或者它是否会完全搞砸。我愿意尝试在我自己的示例中学习有关使用抽象类的知识,但是如果有人可以帮助我理解我在做什么,那就太好了!

4

3 回答 3

1

如果你的新类依赖于向量,那么不要继承它,而是尝试组合......所以假设你想创建自己的队列,那么从向量继承而不是拥有向量类型的数据成员不是一个好主意。这比继承有很多优势。如果您需要将容器更改为其他设置,您不必担心更改界面。您仍然会有一些添加和删除类的接口。因此客户端代码将独立于您用于生成队列的容器。只是旁注:考虑使用组合而不是继承。并查看一些设计模式并尝试了解何时需要组合以及何时无法避免继承。

于 2012-11-09T04:16:54.340 回答
1

据我了解,您正在尝试转换class MyClassabstract class AbstractMyClass

因此,如果您将 MyClass 转换为抽象类,则所有语句如

AbstractMyClass myClass=new AbstractMyClass();

会给你一个错误,因为你不能创建一个 AbstractMyClass 的实例。另外,如果情况是

abstract class AbstractMyClass
{
}
class ConcreteMyClass extends AbstractMyClass
{
}

然后做可以做类似的事情

AbstractMyClass abstractMyClass=new ConcreteMyClass();

或通常的

ConcreteMyClass concreteMyClass=new ConcreteMyCLass();
于 2012-11-09T04:18:21.417 回答
0

继承:是一种关系。更重要的是基类和子类的接口应该是一样的。在这里,您不希望客户端代码使用 push_back()(对于 C++)添加新元素,而是使用 add() 之类的方法。所以接口不同,清楚地表明错误使用了继承。组合:有一个并且“实现在条件”。这是来自 Scott Mayer 的有效 C++。与您的情况一样,您希望在某些方面实现新的 DataStrucutre。所以组合是你需要的。现在派生类不需要具有相同的接口。一般来说,如果你发现接口是相同的,它更像是继承,如果不是组合。组合在继承方面还有很多其他优势。只需谷歌或选择任何好的设计书籍。

于 2012-11-09T19:18:40.063 回答