2010-12-13 4 views
3

:C++에서 기본 생성자를 사용하여 변수를 정의하고 선언하려면 어떻게해야합니까? 전역 범위에서 선언과 정의에 대한 이해에서

MyClass instance();//Declares a function that returns a MyClass 
MyClass instance;//Declares an instance of MyClass 

그것은 변수를 선언하고 전역 범위에서 기본 생성자를 사용하도록 정의 할 수 있습니까? 클래스 대신 구조체를 사용한다면 어떨까요?

편집 :

좋아, MyClass instance; 기본 생성자를 호출한다. 사람이이 this example과 일치하는 방법을 설명 할 수 :

int a; // not default constructed, will have random data 
int b = int(); // will be initialised to zero 

답변

6
MyClass instance; 

은 (매개 변수없이 즉 생성자) 기본 생성자를 호출합니다.

이 매개 변수를 사용하여 오버로드 된 생성자를 호출하기 때문에 다음 할 것, 직관적입니다 :

MyClass instance(param1, param2); 

논리가 기본 생성자를 호출 빈 인수 목록을 전달 것을 당신에게 말할 것이다, 그러나 다음 코드 ...

MyClass instance(); 

은 ... 컴파일러보다는 MyClass 개체의 건설에 프로토 타입처럼 보인다.

struct 기본적으로 public 회원을 보유하는 것을 제외 ++ struct와 C의 class 사이에는 차이가 없습니다와 class는 기본적으로 private 회원을 보유.

+0

왜이 동작이'i nt' 작동 (위의 편집 참조)? – Casebash

+0

@Casebash -'int'는 POD 타입이며, 선언 된 방식에 따라 0으로 초기화되거나 초기화되지 않습니다. 'int'를 국지적으로 스택에 선언하고 그것을 명시 적으로 초기화하지 않으면, 여러분이 지시 한대로 임의의 데이터를 갖게됩니다. 자세한 내용은이 답변을 참조하십시오. http : // stackoverflow.3102134 # 3102134 – LeopardSkinPillBoxHat

+0

'MyStruct'가'struct MyStruct {int a;};'로 정의되었다고 가정 해 봅시다. 링크 된 대답은 MyStruct가 로컬 범위에서 선언 된 경우 (myInstance.a가 정의되지 않는다고 말하면) 기본값으로 초기화되지 않았 음을 의미합니다. 구조체의 기본 생성자는 구조체의 각 요소에 대한 기본 생성자를 호출합니다. 맞습니까? – Casebash

1
MyClass instance; 

또한 기본 생성자를 사용하여 정의됩니다. 단순히 선언 만하면됩니다.

extern MyClass instance; 

이것은 정의가 아닙니다. 그러나 둘 다 외부 연계가 있습니다.

2
  1. 전역 범위에 상관없이 상관 없습니다.
  2. MyClass instance;
  3. 는 기본 생성자, 다만 선언을 사용하여 정의 (입니다. (예를 들어, 헤더 파일), 당신은 extern MyClass instance;을 사용합니다.이
  4. 그것은 중요하지 않습니다,이 부분에 대한 여부만을 선언을 얻으려면 MyClass는 클래스 또는 구조체이다. C++에서 구조체와 클래스 사이에 변화 것은
  5. . 회원들과 기지 공개 또는 비공개 여부의 기본 해석이 명시하려면 MyClass instance = MyClass();을 작성할 수 있습니다.
관련 문제