C ++ - 不同类型对象的数组

时间:2017-01-29 23:34:13

标签: c++ arrays casting

我是C ++类的新手,我试图弄清楚如何用模板创建不同类型对象的数组。在这个例子中,我试图将7个重量为0.5的Apple对象添加到Basket数组中。

#include <iostream>

template <class DT> class Object
{
public:
    Object();
    virtual ~Object();
}
Object::Object() {}
Object::~Object() {}

class Apples
{
public:
    double weight;

    Apples(double apples);
    virtual ~Apples();
}
Apples::Apples(double weight)
{
    weight = weight;
}
Apples::~Apples() {}

using namespace std;

int main()
{
    Object* Basket[10];
    Apples* anApple;

    int position;
    position = 0;

    for(int i=0; i<7; i++)
        Basket[position + 1] = new Apple(0.5);

    return 0;
}

我遇到的主要错误是我无法从底部的第四行将Object *转换为Apple *。您对如何解决此问题有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您需要Apples继承Object

class Apples : public Object

此处Object无需成为模板。

其他事项:

  • 不要将对象存储在未初始化的数组中。您将无法确定哪些插槽已初始化,哪些不在以后。首先将所有指针重置为null,或者更好地使用std::vector
  • 定位逻辑似乎错了。您不使用i,但始终存储在position+1,始终为1.索引从0开始,因此您可能只需要i
  • 考虑以后如何安全地删除对象。您需要迭代数组并在每个对象上调用delete。或者您可以考虑使用std::vector<unique_ptr<Object>>