我来自Java和Ruby,所以我很难用c ++编写简单的东西,c ++更难以驯服......
我想在类构造函数中初始化一个数组,其中包含可由类中所有方法访问的预定义值。是的,基本的东西。
换句话说,我想做这样的事情:
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 :(得分: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
};
答案 1 :(得分: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
答案 2 :(得分:0)
如果您可以使用C ++ 11,则支持uniform initialization,它允许您在比C中的特殊情况更多的上下文中指定大括号括起的值列表。