2013-04-26 2 views
0

하는 비 - 초기 값을 사용하는이 같은 선언함으로써코드 다음의 예를 고려 가변

class MyClass { 
    public: 
    MyClass(float f, char a); 

    private: 
    int b; 
}; 

을 deafult으로 0으로 설정된다 B 정수의 초기 값은?

이 경우 가능하면 다음과 같이 b 값을 변경할 수 있습니다 : (다음 코드는 여러 번 호출되며 매번 b에 지정된 값은 다음 반복에 필요합니다. 이렇게 선언 절차)

int fg = int(ds/r); 
int temp1; 
if(b==0) { 
    temp1=0; 
} 

temp1=b; 
b=fg; 
+0

, 사람의 마음을 말한다 이유 설명 : int b; cout << b << endl; 그래도 결과는 0입니까? –

+2

@FlorisVelleman :'b'가 정적 저장 기간을 가지고 있다면, 그것은 zero-initialised 될 것입니다. 그렇지 않으면 초기 값은 지정되지 않으며 0 일 수도 있고 아닐 수도 있습니다. 문제는 클래스 멤버이므로 저장 기간은 포함 된 개체의 저장 기간입니다. –

답변

2

, deafult으로 0으로 설정된다 정수 B의 초기 값은?

모든 것은 생성자의 구현에 따라 다릅니다. 그것에 대해 아무 것도하지 않으면 b의 값은 지정되지 않습니다.

당신이 당신의 생성자에서 이런 일을해야합니다, 그것은 0로 설정되어 있는지 확인하려면 (들) 구현 (들) :

MyClass::MyClass(float f, char a) : b() {} 

C++ (11) 당신이에서 데이터 멤버를 초기화 할 수하는 것으로 선언의 포인트는, 그래서 당신은이 작업을 수행 할 수 있습니다

class MyClass { 
    public: 
    MyClass(float f, char a); 

    private: 
    int b = 0; // or int b{0}, but not int b(0) 
}; 
+0

'MyClass :: MyClass (float f, char a) : b (0) {}'? –

+0

@ W.B. 'b()'는 잘 할 것입니다. 그러나 일부는 그것에 대해 명백하게하는 것을 선호하는데 이는 괜찮습니다. – juanchopanza

+0

흥미 롭습니다. 나는 부울 기본값이 거짓임을 알고, int에 대해서는 알지 못했다. –

1

변수 b 당신이 (멤버 이니셜 라이저 목록에 초기화 제안) 생성자에서 초기화하지 않는 경우 0에 초기화되지

MyClass(float f, char a) : b(0) { } 
0

Th 변수가 초기화되지 않았습니다. 즉, 값이 정의되지 않았습니다 (임의의 휴지통).

원하는 값을 설정할 수 있습니다. (b가 초기화 된 한) 문제는 없습니다.

3

기본적으로 초기화되지 않습니다. C++ 11에서

그냥 쓸 수 있습니다 : 당신이 명시 적으로하지 않을 경우

private: 
    int b = 0; 

이제 클래스의 생성자는 0b의 값을 초기화합니다 그렇지 않으면 답에서 제외

관련 문제