【问题标题】:Declare an array of objects using a for loop c++使用 for 循环 c++ 声明一个对象数组
【发布时间】:2011-03-07 23:02:51
【问题描述】:

好的。所以我声明了一个对象数组,并使用以下代码手动定义了它们:

Object* objects[] =
{
    new Object(/*constructor parameters*/),
    new Object(/*constructor parameters*/)
}; 

有没有使用某种循环(最好是 for 循环)来声明这些?比如:

Object* objects[] =
{
    for(int i=0; i<20; /*number of objects*/ i++)
    {
        new Object(/*constructor parameters*/);
    }
}; 

但是语法正确吗?

【问题讨论】:

    标签: c++ arrays object syntax declaration


    【解决方案1】:

    我强烈建议使用标准库容器而不是数组和指针:

    #include <vector>
    
    std::vector<Object> objects;
    
    // ...
    
    void inside_some_function()
    {
        objects.reserve(20);
        for (int i = 0; i < 20; ++i)
        {
            objects.push_back(Object( /* constructor parameters */ ));
        }
    }
    

    这提供了异常安全性并减少了堆压力。

    【讨论】:

    • 我试过了,它给了我一些关于 objects.reserve(20); 的错误。线。它说它需要在“。”之前进行构造函数、析构函数或类型转换。令牌。
    • @Keelx:您不能在全局范围内编写语句,只能在函数内编写。您应该将 reserve 部分放在循环之前,请参阅我的编辑。
    • 酷。现在让它们都指向对象而不是实际对象的语法是什么?
    • 是的。和控制寿命等。但我还是发现了。感谢您的帮助!
    【解决方案2】:
    Object* objects[20];
    
    for(int i=0; i<20; /*number of objects*/ i++)
    {
        objects[i] = new Object(/*constructor parameters*/);
    }
    

    【讨论】:

    • 啊,打败我了 - +1。唯一需要注意的是在非指针类型上调用“new”。
    • 这个方法我试过了,还是不行。它在 for 循环中给了我一些 unqualified-id 错误。
    • @Keelx:您能否编辑您的问题以包含您使用的确切代码以及您收到的错误消息?
    【解决方案3】:

    C++ 中的点可以用作数组。试试这样的:

    // Example
    #include <iostream>
    
    using namespace std;
    
    class Object
    {
    public:
        Object(){}
        Object(int t) : w00t(t){}
        void print(){ cout<< w00t << endl; }
    private:
        int w00t;
    };
    
    int main()
    {
        Object * objects = new Object[20];
        for(int i=0;i<20;++i)
            objects[i] = Object(i);
    
        objects[5].print();
        objects[7].print();
    
        delete [] objects;
        return 0;
    }
    

    问候,
    丹尼斯 M.

    【讨论】:

    • 但是...如果您将对象的数量放在构造函数的位置,我将如何声明构造函数?它是如何工作的?
    • 您可以声明/实现多个构造函数。我的示例有 2 个。一个默认构造函数(创建数组的方式)和另一个简单地保存已创建对象的输入值(如果提供的话)。
    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多