2012-04-27 2 views
0

나는 C++과 OOP를 배우고 있으며 "Pion"이라는 클래스가 있으며 "Chessboard"클래스가 있으며 "Chessboard"클래스에 선언 할 필요가 있습니다 클래스 "Pion"에 대한 포인터의 2 차원 배열을 만들고 NULL 포인터로 초기화합니다.C++ 클래스에 대한 포인터 배열, null pionters로 초기화

2d 배열을 선언하는 방법을 알고 있지만 NULL 포인터로 초기화하는 방법을 모르겠습니다.

2d 배열을 선언하는 코드는 다음과 같아야합니다. Pion * P [8] [8];

하지만 null 포인터 부분을 설정하지 않습니다.

도움말/도움말을 환영합니다.

[편집]

모든 해답/팁을 주셔서 감사하지만 난 아직도 혼란 스러워요. 그래서 Chessboard라는 클래스가 있고 "Pion"클래스에 링크되는 포인터의 2 차원 배열을 만들어야합니다.이 배열은 클래스 멤버 여야하고 NULL 포인터로 초기화해야합니다.

은 그래서 나는 일을하려고 시도하고 난 나는 private 멤버 클래스

PION * P를 선언 한 .H (헤더 파일)이

함께 왔어요 [8] [ 8];

과 concstructor 내에서 내가 넣었습니다이

for (int x = 0; x < 8; ++x) { 
    for (int y = 0; y < 8; ++y) { 
     m_velden[x][y] = NULL; 
    } 
} 

이 작동하는 것 같군하지만 난이 최선의 해결책

+0

2D 배열을 반복적으로 반복하는 방법은 무엇입니까? 그냥 똑같이하고 해당 항목을 null로 설정하십시오. –

답변

4

P가 지역 변수인지 또는 클래스 멤버인지에 따라 다릅니다. 는 1 일 경우에는, 두 번째 경우 선언

Pion *P[8][8] = {}; 

의 순간에 NULL 모든 요소를 ​​초기화 할 수 있습니다 Chessboard 생성자에서 초기화 목록에 P()를 사용합니다.

+0

'P'가 데이터 멤버 인 경우에는 작동하지 않습니다. 'P'가 데이터 멤버라면, 클래스 생성자의 초기화리스트에'P()'를 추가해야합니다. –

+0

@JamesMcNellis 동의합니다. 포스터에 반원이 필요한지 여부는 질문에서 분명하지 않았습니다. – Andrey

0

인지 모르겠어요이 시도 :

for(int i = 0; i < 8; ++i) 
{ 
    for(int j = 0; j < 8; ++j) 
    { 
    P[i][j] = NULL; 
    } 
} 
2

몇 가지 제안 : 먼저 다차원 배열은 C++의 혼전 가치가 거의 없습니다. 단일 차원 배열을 사용하는 것이 더 좋을 것입니다. 그런 다음 행과 열을 가져 와서 해당 논리 위치에있는 요소에 대한 참조를 반환하는 함수를 작성하십시오. 단일 차원 배열은 다루기가 더 쉽습니다.

둘째, 고정 크기 C 스타일 배열 대신 std::array을 사용하는 것이 가장 좋습니다. std::array 사용과 관련된 오버 헤드가 없으며 많은 무료 혜택을 제공합니다.

동적으로 할당 된 개체의 올바른 소유권과 수명 관리를 보장하기 위해 스마트 포인터 (예 : std::unique_ptr<Pion>)를 사용하는 것이 좋습니다. 물론 포인터를 사용하지 않아도되고, 포인터를 사용하지 않고 배열에 Pion 개체를 값으로 저장할 수 있다면 훨씬 간단 할 것입니다. 특정 사용 사례에 따라 다릅니다.특히, 그들은 동적 배열의 크기를 조정하기 위해 매우 유용하다입니다 벡터를 고려하는

class Chessboard 
{ 
    std::array<std::unique_ptr<Pion>, 64> _pions; 
}; 
0

또 다른 방법 :) 마음에 이러한 세 가지 제안을

, 당신처럼 보이는 뭔가를 끝낼 수 있습니다 클래스의 "배열"에 유용합니다.