2014-01-22 54 views
1

類範圍數組初始化我來自Java和Ruby,所以我也很難在C編碼簡單的東西++,C++是很難馴服......在C++ 11

我想在初始化數組具有可以通過類中的所有方法訪問的預定義​​值的類構造函數。是的,基本的東西。

換句話說,我想要做這樣的事情:

Box.h

class SomeClass 
{ 
public: 
    SomeClass(int something); 
    SomeMethod(); 
    DoSomething(int thing); 
protected: 
    int _something; 
    int[] arr; 
}; 

Box.cpp

SomeClass::SomeClass(int something) : something(_something) 
{ 
    arr ={16,2,45,65,45}; 
    for (int x = 0; x < 5; x++) 
     arr[i] = arr[i] * _something; 
} 

SomeClass::SomeMethod(){ 
    for (int x = 0; x < 5; x++) 
     DoSomething(arr[i]); 
} 

SomeClass::DoSomething(int thing){ 
    //whatever 
} 

如何?

+0

你想在編譯時固定數組大小嗎? – juanchopanza

+0

是的,但它的所有值必須在構造函數中初始化 –

+0

您應該指出是否需要C++ 11或C++ 03解決方案。不幸的是,沒有辦法做到你在C++ 03中所表達的內容。您必須在構造函數中創建一個臨時數組,然後使用for或其他算法(例如,填充,生成)。不幸的是,我並不知道C++ 11的方法可以做到這一點,但是還有一些額外的選項和容器類型可以以不同的方式完成。 – shawn1874

回答

1
#include <iostream> 
//#include <initializer_list> 
#include <array> 
#include <algorithm> 

class foo 
{ 
    public: 
    foo() : values({{16,2,45,65,45}}) 
    { 
     // I left the below commented out in case you want to research more and use other kinds of types for doing it. 
     //std::initializer_list<int> list = {16,2,45,65,45}; 
     //std::copy(std::begin(list), std::end(list), std::begin(values)); 
    } 
    void print() 
    { 
     std::for_each(std::begin(values), std::end(values), 
      [](int v) { std::cout << v << ' '; }); 
    } 

    private: 
    static const int SIZE = 5; 
    std::array<int, 5> values; 
}; 

int main() 
{ 
    foo fooInstance; 
    fooInstance.print(); 
    return 0; 
} 

以上是我可以在短時間內做的最好的。我使用以下編譯器進行測試。你可以用它作爲出發點,看看你是否可以學習其他的方法。諸如generate之類的算法也可以與lamda表達式一起使用,以便生成一組受控的值(與我們示例中的硬編碼列表相反)。 http://www.compileonline.com/compile_cpp11_online.php

0

如果你可以使用C++ 11,有一個uniform initialization支持,允許您指定值的大括號內的列表中較特殊的情況更上下文中C.

1

你有選擇初始化數組數據成員,以及兩種或陣列可以使用:

使用C數組,

struct Foo 
{ 
    int a[5] = {1,2,3,4,5}; // initialization at point of declaration 
}; 

struct Bar 
{ 
    int a[5]; 
    Bar() : a{1,2,3,4,5} {} // initialization in constructor initialization list 
}; 

或使用std::array

struct Foo 
{ 
    std::array<int,5> a = {{1,2,3,4,5}}; // initialization at point of declaration 
}; 

struct Bar 
{ 
    std::array<int,5> a; 
    Bar() : a{{1,2,3,4,5}} {} // initialization in constructor initialization list 
}; 
+0

在構造函數初始化列表中使用C風格的數組進行初始化,我得到一個錯誤..:無法爲數組指定顯式初始化程序 –

+0

@FelixD。您可能錯過了相關的C++ 11支持。 – juanchopanza