具有继承的数据结构.初始化问题

Car*_*ock 2 c++ arrays inheritance

我需要创建一个类,比方说FineStack,谁应该声明一个能够管理不同类型罚款的结构(LightFine,SeriousFine).两者的超类都是Fine.

问题是,我真的需要模板吗?我认为没有必要,所以这就是我的想法:

- >声明Fine *fines; 而且...创建数组(罚款?数组类型的-的)Fine的对象(超类),它应该能够同时管理LightFineSeriousFine对象.

- >问题是.我该如何申报?Fine应该是一个抽象类,因此不能创建任何实例(实例应该是LightFine's或SeriousFine's).

我对此感到困惑,因为我找不到获得它的方法.我在Stackoverflow中读过多个问题,你们通常建议使用这些问题std::vector,这使你更容易管理这类东西.

我应该这样走,忘记最初的想法吗?

我需要一个能够以任何顺序处理来自两个子类的任何对象的结构(让我们说... 3 LightFine和2 SeriousFine......或者从结构的开始到结束彼此交替...无论如何.

Ami*_*hum 10

我想指出你正确的方向,而不只是给你整个shebang.如果这没有帮助,请询问有什么问题:

虽然Fine无法实例化,但您可以指向它,因此:

Fine* f1 = new LightFine();
Fine* f2 = new SeriousFine();
Run Code Online (Sandbox Code Playgroud)

都是合法的,因为LightFine是-a FineSeriousFineis-a Fine.

编辑:我看到这还不清楚.如果您阅读上述内容,您可以看到我可以握住一个指针Fine*,然后让它"暗中"指向其中一个LightFineSeriousFine.这意味着,如果我要保留一堆Fine*指针,其中一些可能是LightFine和一些SeriousFine.即,我可以这样做:

Fine** fines = new Fine*[5];
f[0] = new LightFine();
f[1] = new SeriousFine();
...
for (int i=0; i<5; i++) {
    std::cout << fines[i]->toString() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出将是:

轻微的

严重的罚款

...

如果你希望使用矢量,它也应该是类型vector<Fine*> vector<Fine>.