- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要创建一个类,比方说 FineStack
,它应该声明一个能够管理不同类型罚款的结构(LightFine
、SeriousFine
).两者的父类(super class)都是 Fine
。
问题是,我真的需要模板吗?我觉得没必要,所以我是这样想的:
->声明罚款*罚款
; (罚款数组的种类?)并且...创建 Fine
的对象数组(父类(super class)),它应该能够管理 LightFine
和 SeriousFine
个对象。
-> 问题是。我应该如何申报? Fine
应该是一个抽象类,因此不能创建任何实例(实例应该是 LightFine
的或 SeriousFine
的)。
我被这个困住了,因为我找不到获得它的方法。我在 Stackoverflow 中阅读了多个问题,你们通常建议使用 std::vector
,这使您更容易管理此类内容。
我应该那样做而忘记最初的想法吗?
我需要一个结构,它应该能够以任何顺序处理来自两个子类的任何对象(假设 .. 3 LightFine
和 2 SeriousFine
... 或从结构的开始到结束彼此交替……随便。
最佳答案
我想为您指明正确的方向,而不仅仅是给您整个 shebang。如果这没有帮助,请询问您有什么问题:
尽管Fine
不能实例化,你可以指向它,所以:
Fine* f1 = new LightFine();
Fine* f2 = new SeriousFine();
都是合法的,因为LightFine
是一个Fine
和 SeriousFine
是一个Fine
.
编辑:我看这还不清楚。如果你阅读上面的内容,你会发现我可以持有一个指针 Fine*
,但让它“ secret 地”指向LightFine
或 SeriousFine
.这意味着,如果我保留一堆 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;
}
输出将是:
a light fine
a serious fine
...
如果您确实想使用 vector ,它也应该是 vector<Fine*>
类型并且不是 vector<Fine>
.
关于c++ - 具有继承性的数据结构。初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842570/
我是一名优秀的程序员,十分优秀!