2009-11-02 7 views
0

테스트 t [2]를 만들려고하면 아래 코드에서 컴파일 오류가 발생합니다. 에 대한 기본 생성자가 없기 때문입니다.C++ 배열 초기화

하지만 Test t[2] = {test(1,2), test(2,3)};을 작성하면 올바르게 작동합니다.

1) 그러나 우리가 100 개 이상의 배열 요소를 만들고 싶다면 상황을 생각해보십시오. 우리는 다음과 같이 중괄호 안에 100 개의 요소를 만들어야합니다. Test t [100] = {test (1,2), test (1,2) ....../100 times /};

위의 코드는 유지하기가 어렵습니다. 두 가지 정수를 사용하고 루프에서 실행하는 공용 멤버 함수를 만드는 방법이 한 가지 더 있습니다. 이 문제를 해결하지만 다른 좋은 방법을 알고 싶습니다. 내가 만들 경우 새로운

Test *t = new test[10]; 

내가받을 컴파일 에러 (없음 기본 생성자)를 사용하여

2). 이 문제를 해결하는 방법.

class test 
{ 
    int _a;int _b; 

public: 
    test(int a, int b); 
    void display(); 
}; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    test t[10]; 

    for (int i = 0 ; i< 10; i++) 
     t[i].display(); 
} 

답변

3

배열에서 10 개의 요소를 구성하기 위해 컴파일러는 어떻게 든 생성자를 통해 해당 요소를 유추해야합니다. 배열의 경우, 인자를 가지지 않는 기본 생성자 만이 배열의 원소에 인자를 넘겨 줄 수 없으므로 사용할 수 있습니다. 당신이 Therfor 인수를 복용하지 않는 생성자

test::test() 

을 입증한다.

+0

배열은 기본 생성자를 통해서만 만들 수 있습니까? 다른 생성자로 배열을 생성 할 수 있습니까? – Naruto

+0

아니요, 불가능합니다. 그걸 어떻게 써줄 수 있니? 이에 대한 구문은 없습니다. –

+0

고마워, 테스트 t [2] = {테스트 (1,2), 테스트 (2,3)}; .. 우리는이 방법을 쓸 수 있지만 요소 수가 증가하면 유지하기가 어렵습니다. 그래서 다른 방법을 묻는 중입니까? – Naruto

1

예제에서 표시 될 것으로 예상되는 항목은 무엇입니까?
아는 경우 기본 CTor (매개 변수가없는)를 작성하고 값을 기본값으로 설정할 수 있습니다.

기본 ctor에의 예 :

// Variant 1: Use the initialization list 
test() 
: a(-1) 
, b(-1) 
{ 
} 

// OR 
// Variant 2: Do it in the CTor's body 
test() 
{ 
    a = -1; 
    b = -1; 
} 

참고 : 당신은 여러 CTors을 쓸 수 있습니다 (이것은 "오버로드"라는 것). 하나는 매개 변수를 사용하지 않고 기본값을 설정하고 다른 하나는 매개 변수를 사용하여 해당 값을 설정합니다.

+0

디스플레이 기능은 다음과 같습니다. cout << "a ="<< _ a << "b ="<< _ b; 기본 생성자 또는 매개 변수가없는 생성자를 작성합니다. 그렇다면 어떻게 런타임에 변수에 값을 전달할 수 있습니까? – Naruto

+0

건설 시간에 값을 전달하지 않으면 나중에 (예 : (1) setValues ​​(int a, int b) 또는 setA (int a) 및 setB (int b) 또는 (3) 직접 구성원 변수를 수정하십시오. – foraidt

+0

@GrabIt : a 및 b를 나중에 변경하려면 액세스 메소드 setA(), getA()를 클래스에 추가하십시오. mxp의 질문을 의역하여 : 기본 생성자 (매개 변수가없는 생성자)에서 암시 적으로 a와 b를 -1 (또는 0 또는 일부 다른 값)으로 설정하는 것이 합리적입니까? – digitalarbeiter

0

기본 생성자로 사용될 모든 매개 변수의 기본값을 사용하여 생성자를 정의 할 수도 있습니다.

test(int a = 0, int b = 0) :_a(a), _b(b) {} 

모든 매개 변수에는 기본값이 있으므로이 생성자가 기본값으로 사용됩니다. 초기화 목록을 남기거나 생성자 본문에 멤버 변수를 초기화하지 않으면 임의의 데이터 값을 제공 할 수 있습니다. 일부 시스템은 모든 메모리 할당을 0으로 만들지 만 일부는 할당하지 않을 수도 있습니다.