전체 글 118

C++ return new(*this); 는 복사 생성자를 호출한다

프로젝트를 진행중에 prototype을 clone하는 코드를 작성해야 했는데 다음과 같은 방식으로 작성한 코드를 보았고 이게 과연 복사 생성자를 호출할지, 그냥 생성자를 호출할 지 궁금했다. CClass* CClass::Clone() { return new CClass(*this); } 내가 아는 복사 생성자의 호출 시기는 객체를 인자로 넘길 때 reference 형태가 아닌 value 형태로 넘길 때 객체를 값으로 반환할 때 객체를 생성과 동시에 기존에 존재하는 객체로 초기화 할 때 이렇게 3가지 인데, 저 3가지중에 어디에 해당되는지 확신이 없었다. 1, 2번은 당연히 아니고 3번이 의심돼서 아래와 같은 코드를 작성하고 직접 확인해보았다. //CClass.h class CClass { public: ..

공부/C || C++ 2021.08.17

C/C++ 파일 입출력

C 스타일 파일 입출력 errno_t fopen_s( FILE** pFile, const char *filename, const char *mode ); return : 성공 시 0을 리턴하고, 에러 발생 시 errno_t타입의 0이 아닌 값을 리턴 pFile : FILE타입(파일 스트림)의 이중 포인터 filename : 파일 이름. 파일 이름만 쓰고, visual studio에서 빌드 하면 프로젝트 파일이 있는 곳에 파일을 만든다 mode r : 파일 읽어오기 w : 파일 쓰기(만들기) a : 파일에 접근하여 이어 쓰기 r+ : 파일이 존재하면 해당 파일을 읽고 쓰기 가능하게 연다. 파일이 없으면 에러를 반환 w+ : 파일이 존재하면 해당 파일에 읽고 쓰기 가능하게 연다. 파일이 없으면 새로 만든다 ..

공부/C || C++ 2021.08.14

C7510 : 종속적 형식 이름은 'typename' 접두사와 함께 사용해야 합니다.

Hash Table을 구현하다가 제목과 같은 오류를 만났다. 아래와 같은 코드를 작성하다가 만났다. 아래 코드에서 "에러 발생 지점"이라고 표시한 부분을 잘 보자 template class CHashNode { template friend class CHashTable; template friend class CHashTableIterator; private: CHashNode() { } ~CHashNode() { // 에러 발생 지점 // 아래 코드 2줄 맨 앞에 typename을 붙여줘야 한다. CList::iterator iter = m_Chain.begin(); // 에러 발생 지점 CList::iterator iterEnd = m_Chain.end(); for (; iter != iterEnd;..

공부/그 외 2021.08.12

마스터 정리(Master Method), Big-Oh, Theta, Omega Notation

시간 복잡도가 점화식으로 정의될 때, 마스터 정리를 이용해서 시간 복잡도를 계산할 수 있다. 마스터 정리와 마스터 정리의 사용 조건에 대해 간단히 정리해보자. 마스터 정리 조건 시간 복잡도 T(n) = aT(n/b) + f(n)으로 정의될 때, f(n)이 다항식(polynomial function)이어야 한다 a >=1 && b >=1 인 양의 실수이어야 한다. 그 말은 즉 문제를 분할 했을 때 더 작은 문제가 되어야 한다는 의미이다. 만약 b가 1보다 작은 양의 실수면 문제를 분할했을 때 더 큰 문제가 되므로 안된다 정규 조건(Regularity Condition)을 의미하는 a*f(n/b)

공부/Algorithm 2021.08.07