본문 바로가기

개발/C++

C++ 가상 소멸자 (feat. 상속 생성자 소멸자 호출순서) 상속을 할때 소멸자에 virtual을 붙여줘야 함 부모클래스로 선언하고 자식클래스로 동적할당했을 때 소멸 시 자식 소멸자가 호출 안 됨 virtual을 붙이지 않은 경우 #include "pch.h" #include class A { public: A(); ~A(); }; class B : public A { public: B(); ~B(); }; A::A() { std::cout
C++ 소켓 에코 채팅 구현하기 소켓 초기화 하는 부분은 ip주소랑 포트 번호 빼고는 거의 고정이라고 보면 되는듯 클라이언트 #include "stdafx.h" #include #include #include #pragma comment(lib, "ws2_32.lib") const int BUFSIZE = 50; int main() { WSADATA wsadata; SOCKET client_socket; SOCKADDR_IN client_address; int port = 5050; if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0) { std::cout
C++ HashMap 구현해보기 (unorder_map) key - > hashfunc -> hash value hash value가 같을때 충돌 회피법 개방주소법 : 다른 주소로 보냄 선형 탐색(Linear Probing) : 해시충돌 시 다음 버켓, 혹은 몇 개를 건너뛰어 데이터를 삽입한다. 제곱 탐색(Quadratic Probing) : 해시충돌 시 제곱만큼 건너뛴 버켓에 데이터를 삽입(1,4,9,16..) 이중 해시(Double Hashing) : 해시충돌 시 다른 해시함수를 한 번 더 적용한 결과를 이용함. 체이닝 : 배열 안에 리스트 std::list[] 최선 : O(1) 최악 : O(n) 외, 내부 단편화 가능성 모두 존재 ◎ 체이닝(Chaining)의 장점 → 연결 리스트만 사용하면 된다. 즉, 복잡한 계산식을 사용할 필요가 개방주소법에 비해 적..
C++ 맵 구현해보기 역시 STL 사용법은 패스 이진트리, 입력시 정렬을 보장함, 검색에 유리함 자식 방문후 돌아과정이 있어 추가 삭제시 리스트 보다 느림 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314..
C++ 리스트 구현해보기 역시 STL 사용법은 패스 노드 기반 컨테이너, 보통은 이중 연결 리스트를 얘기함, 임의 접근 불가능 추가 삭제에 비용이 적음, 메모리에 연속적으로 구성되지 않아 순회가 상대적으로 느림 이중연결 리스트 구현 코드1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291..
C++ 벡터 구현해보기 STL 벡터 그냥 사용법은 패스.. 특징으로는 동적 배열 내부는 배열로 구성됨 임의 요소 접근이 가능함 Capacity가 가득 찼을 때 배열 길이를 늘여 메모리를 새로 할당 하고 기존 배열에서 요소를 옮겨야 해 느림 new(시스템콜) 커널에 요청 마지막 인덱스가 아닌 요소를 삭제할 때 뒤의 요소를 옮겨야 해 느림, 할당된 메모리에 비해 적게 사용할 가능성이 있음 Capacity : 내부 배열의 길이 Size : 추가된 요소 개수 구현 코드 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798..
C++ 메모리 구조 프로그램의 메모리 구조는 코드, 데이터, 힙, 스탭으로 구성됨 코드 영역 실행할 프로그램의 코드가 저장되는 영역, CPU가 코드영역에서 하나씩 처리함 데이터 영역 프로그램의 전역변수, static변수가 저장되는 영역, 동적으로 할당하는 변수는 힙에 동적할당된 메모리를참조 힙 영역 메모리를 사용자가 직접 관리하는 영역, 사용자에 의해 동적으로 할당되고 해제되는 영역, 런타임 시 크기결정 스택 영역 함수의 지역변수와 매개변수가 저장되는 영역, 함수를 벗어나면 소멸됨 컴파일 시 크기결정
GoogleTest for C++ 사용하기 다운로드 : https://github.com/google/googletest 사실 그냥 깃허브에서 다운받고 하면 되긴하는데.. 요래 만들어 요래 실행하면 잘 되는데.. 이게 중요한게 아니라 내 프로젝트에 적용시키는 법이 잘 안 나와서 정리함 일단 솔루션에 구글테스트 프로젝트 하나를 추가함 그리고 다운 받은 구글테스트를 압축풀어서 적당히 솔루션 폴더에 잘 넣음 그러고 실행을 하면 에러가 엄청 나옴.. 방법이 몇 가지 있는데.. 다른 방법은 밑에서 따로 설명하고 일단 구글테스트 프로젝트들만 따로 빌드를 함 shift+F6 하거나 우클릭으로 선택빌드 그럼 빌드 결과로 요런게 나옴 그리고 자기 프로젝트 경로를 찾아서 프로젝트 세팅을 해줘야함 됨 솔루션을 따로 빌드하는게 귀찮다 싶을 때 방법..그냥 참조에 추가..