본문 바로가기
패스트캠퍼스 챌린지(C++ 올인원)

패스트캠퍼스 챌린지 27일차

by 승욱은 2021. 11. 27.

주말..! 이지만 역시 오늘도 거를 수 없다..! fft는 뒤로 미루기로 했지만, 아직 나에겐 큰 수의 소인수분해를 위한 알고리즘을 공부해야한다는 사명이 남아있었다. 그래서..! 오늘 한 것은 바로 밀러-라빈 소수 판정과, 폴라드 로 인수 분해 알고리즘이었다. 밀러-라빈 소수 판정법은 기본적으로 페르마의 소수판정법을 여러 개의 수에 대해 실행하는 것이고, 시간 복잡도가 O(klog^3(n))이다. 폴라드 로 인수 분해 알고리즘은 유사 난수의 mod n이 mod p에 대해서 먼저 순환을 갖게 되는 것을 이용하는 알고리즘으로 O(n^(1/4)) 였다. 이 두 개를 적절히 조합하면 소인수분해 알고리즘을 만들 수 있었고, 이를 이용해서 3개의 다이아 문제를 풀어내었다..!

 

그러고 나서 c++수업을 들었다..! 오늘 c++에서 배운 내용은 드디어 상속..! 이었다. 사실 상속은 자바도, 파이썬도 갖고 있기에 뭐가 다를까?? 싶었던 생각이 있었는데 역시 c++..! 다른 부분이 좀 많이 있었다. 그 부분을 조금 정리해볼까 싶다.

 

1. c++에서 객체의 생성자 호출을 보면 부모 클래스의 생성자가 먼저 호출이 되고, 자식 클래스의 생성자가 먼저 호출이 된다. 아마도 멤버 초기화에 암시적으로 부모 클래스의 생성자가 호출이 되어, 자식 클래스의 생성자가 나중에 실행이 완료되는 것으로 생각된다. 물론 Java와 크게 차이가 없지 않나..? 싶을수도 있긴 한데, 아마도 c++에서는 자식 클래스 생성자의 어떤 실행문도 부모 클래스의 생성자보다 먼저 호출될 수 없다는 점에서 다를 것 같다. (확인은 해봐야겠지만)

 

2. 파괴자가 있다는 점은 역시나 좀 다른 부분일텐데, 파괴자의 경우에는 자식 클래스가 부모클래스보다 먼저 완료된다. 그 이유는 잘 모르겠다... ㅎㅎ

 

3. 상속의 좋은 점은 함수의 매개변수 호출에 있을 텐데, 타 언어와 마찬가지로 부모 클래스형의 변수로 자식 클래스의 객체를 가리킬 수 있다. 다만 이 때 &를 붙여주어야 하는 것 같다. (안붙이면 복사가 일어나려나..? 확인해봐야겠다.)

 

4. 다만 이렇게 부모 클래스형 변수가 자식 클래스 객체를 가리킬 때, 이 객체가 메모리에서 사라질 때 자식클래스의 파괴자가 호출이 안된다. 따라서 virtual이라는 것을 부모 클래스의 파괴자 앞에 붙여주어야한다고 한다.

 

다음 시간부터는 가상함수에 대해 배운다고 하는데, 참 신기한 것들이 많다.. c++은 흥미롭다.

상속에 대해 배우는 모습

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

패스트캠퍼스 : https://bit.ly/3FVdhDa

 

수강료 100% 환급 챌린지 | 패스트캠퍼스

딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!

fastcampus.co.kr

 

#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #C++실력완성올인원패키지

댓글