Game Develop

간단한 문제들 3 본문

C++/GeeksForGeeks Quiz

간단한 문제들 3

MaxLevel 2022. 7. 14. 03:06

 

 

static변수는 선언과 함께 메모리에 할당되어 프로그램 종료까지 메모리를 점유한다. 

초기화되지 않은 정적변수,전역변수는 BSS영역에 할당될 것이고 초기화된것은 Data영역에 할당될것이다.

위의 경우, 초기화 되지 않았으니 BSS영역일것이다. 

fun()함수를 여러번 호출하더라도 t1은 최초선언할 때 생성자를 호출해서 생성된 이후, 계속 메모리를 점유하고있기 때문에 생성자를 여러번 호출하지 않는다. 결국 1번만 호출하기 때문에 답은 C이다.

                                                                                                                                                                                                 

 

 

이 문제는 변환생성자(conversion constructor)를 아느냐 마느냐를 물어보는 문제다. 나는 이 문제에서 처음 알게된 생성자다;; 진짜 여기 사이트 문제풀어보길 잘한 것 같다. 물론 이펙티브 c++책을 사기도 했고, 결국 알게됐었겠지만 아마 좀 더 나중이지 않았을까... 

어쨌든 다시 본론으로 들어가면, 답은 B이다.

아마 A라 생각했을수도 있다. t는 Test라는 클래스객체고 거기에 30이라는 int값을 넣었으니까 변환생성자를 모른다면 충분히 A라고 생각할 수 있다. 하지만 실제로는 에러가 나지않고 묵시적으로 변환생성자가 호출된다.

Test(int a)같은 생성자처럼 매개변수가 한개인 생성자를 변환생성자라 한다. int값을 매개변수로 받기 때문에, 대입연산자를 이용해서 클래스객체가 아니라 int값을 대입하면, 변환생성자가 묵시적으로 호출되어서 t에 값이 들어가게된다.

굳이 표현하자면 t = Test(30); 이라 생각하면 될것같다. 

 

                                                                                                                                                                                                 

 

복사생성자에 const표시가 안되어있기 때문에 답은 C이다. 이거는 그냥 정해져있다고 생각하는게 편할 것 같다.

객체를 생성하기 위해 값만 사용하려는 것이기 때문에, 원본객체의 값들에 대해 수정이 있으면 안되기 때문에 컴파일에러를 내버린다.

 

                                                                                                                                                                                                 

 

생성자는 리턴타입이 없다.

 

                                                                                                                                                                                                 

 

바로 윗문제에서는 생성자는 리턴타입이 없다고 알았는데, 갑자기 바로 이런 문제가 나와서 당황했다.

정답은 B이다. 

 

Test t;

t = Test();

 

이런식으로 코드짜는걸 생각해보면, 묵시적인 반환타입으로 클래스 자기자신이 있다고 말할 수 있다.

 

                                                                                                                                                                                                 

 

일단 여기까지 해서 GeeksForGeeks사이트에서 C++ Constructor 부분 퀴즈는 얼추 다 했다.

모든 문제를 다 한건 아니고, 너무 쉽거나 좀 중복되거나 한건 몇개 뺐다.

예전에 어플로 한번 문제 풀어봤다가 정답률이 심하게 낮아서 충격먹고 한번쯤 쭉 훑어보자...고 생각만 하고 안했었는데, 이렇게 얼추 끝내니까 살짝 뿌듯하다.

안다고 생각던게 틀렸다는걸 알 수 있어서 정말 다행이였고, C++쪽을 배우려는 사람들은 한번쯤 해보는걸 추천한다.