2012-12-08 7 views
1

문자 배열이있는 클래스로 작업하고 있습니다.클래스의 배열 내부에서 값을 초기화하거나 변경하는 방법은 무엇입니까?

class board 
{ 
    char spot[64]; 

public: 
    board(); 
    ~board(void); 


}; 

프로그램 시작시 배열의 각 값을 동일한 문자로 설정하고 싶습니다. 어떻게 생성자에서 값을 초기화 할 수 있습니까? 색인을 통해 액세스하여 변경을 허용하는 쉬운 방법이 있습니까?

고마워요,

답변

4

C++ 03에서는이 작업을 수행 할 수 없습니다. 그러나 C++ 11 생성자 이니셜 라이저 목록의 배열을 초기화 할 수 있습니다 :

board::board() 
: spot { 1, 2, 1, 2, /* ... */ } 
{ } 

당신은 값을 입력하거나 "N 반복 값"을 제공하기 위해 마법의 가변 인자 템플릿으로 올 수 있습니다 (유형이 통합되어있는 한). 또한 누락 된 요소는 0으로 초기화됩니다 (예 : char spot[4] { 1, 2 };).

액세스하려면 클래스 내에 spot[i]을 사용하고 필요에 따라 적합한 접근 함수를 작성할 수 있습니다 (클래스가 단지 전달하는 경우 항상 염려해야하지만 실제로 클래스를 캡슐화하기를 원합니다). 일부 고차원 기능).

배열을 고정 값으로 초기화하는 템플릿 코드를 보려면 별도의 질문으로 게시해야합니다.


업데이트 : 여기에 값 2 모든 배열 요소를 초기화 순진 템플릿 트릭입니다.

#include <iostream> 
#include <utility> 
#include <prettyprint.hpp> 

class Foo 
{ 
    int arr[10]; 

    template <typename T, T> struct Filler { }; 
    template <typename T, bool, unsigned int, T...> struct FillHelper { }; 

    template <typename T, unsigned int I, T V, T ...Vals> 
    Foo(FillHelper<T, true, I, V, Vals...>) 
    : arr { V, Vals... } { } 

    template <typename T, unsigned int I, T V, T ...Vals> 
    Foo(FillHelper<T, false, I, V, Vals...>) 
    : Foo(FillHelper<T, I == 1, I - 1, V, V, Vals...>()) { } 

    template <typename T, unsigned int N, T V> 
    Foo(Filler<T, V>, T const (&)[N]) 
    : Foo(FillHelper<T, N == 1, N - 1, V>()) 
    { } 

public: 
    Foo() : Foo(Filler<int, 2>(), arr) 
    { 
     std::cout << "Foo: " << arr << "\n"; 
    } 
}; 


int main() 
{ 
    Foo x; 
} 

출력 : Foo: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

+0

': spot {}'평범한 오래된'int arr [10] = {};'과 같은 멤버를 0으로 초기화하겠습니까? – Kos

+0

@Kos : 예. 또한, C++ 03에서도 (: C++ 98 :-)에서는': spot()'도 마찬가지입니다). –

+0

나는 템플릿 물건을보고 싶습니다. 감사합니다 – Chubsdad

0

는 기본 값 x에 배열의 모든 값을 설정, 당신은에 모든 요소를 ​​설정하는 예를 들어 표준과 같이 :: 위해서 fill_n

를 사용할 수 -1
std :: fill_n (array, 100, -1);

0

세트 이유 memset 함수를 사용하지 동일한 문자

의 배열의 각 값? 예를 들어, 각각의 값을 0x01로 초기화하십시오.

board::board() 
{ 
    memset(spot, 0x01, sizeof(spot)); 
} 
+0

memset에 대해 들어 본 적이 없는데 표준 라이브러리의 기능입니까? –

+0

매우 일반적인 'C'함수입니다. http://www.cplusplus.com/reference/cstring/memset/ – benjarobin

0

for 루프를 사용하여 각 요소를 지정할 수 있습니다.

관련 문제