gpt4 book ai didi

c++ - 具有继承性的数据结构。初始化问题

转载 作者:太空狗 更新时间:2023-10-29 23:31:26 25 4
gpt4 key购买 nike

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

问题是,我真的需要模板吗?我觉得没必要,所以我是这样想的:

->声明罚款*罚款; (罚款数组的种类?)并且...创建 Fine 的对象数组(父类(super class)),它应该能够管理 LightFineSeriousFine 个对象。

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

我被这个困住了,因为我找不到获得它的方法。我在 Stackoverflow 中阅读了多个问题,你们通常建议使用 std::vector ,这使您更容易管理此类内容。

我应该那样做而忘记最初的想法吗?

我需要一个结构,它应该能够以任何顺序处理来自两个子类的任何对象(假设 .. 3 LightFine 和 2 SeriousFine ... 或从结构的开始到结束彼此交替……随便。

最佳答案

我想为您指明正确的方向,而不仅仅是给您整个 shebang。如果这没有帮助,请询问您有什么问题:

尽管Fine不能实例化,你可以指向它,所以:

Fine* f1 = new LightFine();
Fine* f2 = new SeriousFine();

都是合法的,因为LightFine是一个FineSeriousFine是一个Fine .

编辑:我看这还不清楚。如果你阅读上面的内容,你会发现我可以持有一个指针 Fine* ,但让它“ secret 地”指向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;
}

输出将是:

a light fine

a serious fine

...

如果您确实想使用 vector ,它也应该是 vector<Fine*> 类型并且不是 vector<Fine> .

关于c++ - 具有继承性的数据结构。初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4842570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com