【问题标题】:Instance object with a array带有数组的实例对象
【发布时间】:2015-04-22 15:26:14
【问题描述】:

我正在使用 c++ 中的类,例如:

class foo {
int a ;
    foo (){
      a = rand();
    } 
    foo(int b){ a=b }
 };
 int main(){
   foo * array = new foo[10]; //i want to call constructor foo(int b)
  // foo * array = new foo(4)[10]; ????
 }

请帮忙,谢谢:D

【问题讨论】:

    标签: c++ arrays class constructor instance


    【解决方案1】:

    您应该首先更正您的语法(输入;,使您的构造函数public 等)。然后,你可以在 C++11 中使用统一初始化,比如

    #include <iostream>
    
    class foo {
    public:
        int a;
        foo () {
        }
        foo(int b) { a = b; }
    };
    int main() 
    {
        foo * array = new foo[10] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        std::cout << array[2].a << std::endl; // ok, displays 2
        delete[] array;
    }
    

    您应该尝试完全避免使用原始数组,而是使用std::vector(或std::array)或任何其他标准容器。示例:

    std::vector<foo> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    

    std::vector v(10, 4); // 10 elements, all initialized with 4
    

    不用记得删除内存等

    【讨论】:

    • 最好使用 std::vector,或者至少使用 std::array。
    • 我认为他想将每个元素初始化为4,因此向量示例为:vector&lt;foo&gt; v(10, foo(4))
    • @0x499602D2 确实如此,如果这是故意的话。或者只是std::vector&lt;foo&gt; v(10, 4);,因为foo ctor 不明确。
    • 感谢您的回答,我想初始化我的数组调用另一个构造函数 (foo(int b) ),我将尝试使用 std::vector
    • @margot 就是这里的情况,它会调用foo(int) 构造函数。
    猜你喜欢
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多