본문 바로가기

전체 글51

Why are member functions not virtual by default? 왜 멤버함수는 기본적으로 virtual이 아닌가요? 왜냐하면 많은 클래스가 기본 클래스(부모 클래스)로 사용하기위해 디자인되지 않기 때문입니다.예를 들자면, 복소수 클래스를 보세요 또한, 가상함수가 포함된 클래스의 객체들은 가상함수 호출 메커니즘때문에 별도의 공간이 필요한데, 적형적으로 객체당 1 워드정도가 필요합니다. 이 오버헤드는 중요할 수 있고, 다른 언어(예를들면C 혹은 포트란)의 데이터에 대한 레이아웃 호환성의 걸림돌이 될 수 있습니다. 디자인의 이론적 해석을 더 알고싶으면 Design and Evolution of C++을 참고하세요. 2019. 2. 26.
Why do I have to put the data in my class declarations? 왜 클래스 선언에 데이터를 넣어야 하나요? 그렇게 하지 마세요. 만약에 인터페이스에 데이터를 원치 않을경우, 인터페이스를 정의한 클래스에 넣지마세요. 그 대신 파생 클래스에 넣으세요. "Why do my compiles take so long?"를 참고하세요. 가끔 클래스에 데이터를 표현하고 싶을 때가 있습니다.complex (복소수?) 클래스를 고려해봅시다: template class complex {public:complex() : re(0), im(0) { }complex(Scalar r) : re(r), im(0) { }complex(Scalar r, Scalar i) : re(r), im(i) { }// ... complex& operator+=(const complex& a){ re+=a.re.. 2019. 1. 31.
쓰레드와 프로세스 OS에서 프로세스는 적어도 1개 이상의 스레드로 구성이 되고, 구성하는 각 스레드는 각자의 고유한 상태와 변수들을 처리한다. 그리고 OS는 프로세스간 통신을 처리하기 위해 IPC(Inter-Process Communication)를 제공한다. OS에서 프로세스는 각자 고유한 상태를 가지고 있으며, 프로세스의 각 스레드는 동일한 프로세스 내에서 다른 스레드와 관련하여 고유한 상태를 갖는다. 프로세스는 IPC를 통해 서로 통신을 할 수 있지만, 스레드는 여러가지 방법으로 같은 프로세스 내의 다른 스레드와 통신 할 수 있다. 2019. 1. 30.
Why do my compiles take so long? 왜 컴파일이 오래걸릴까요? 컴파일러 문제일 수 있는데, 컴파일러가 옛날 버전이거나 설치가 잘못되었거나, 또 컴퓨터가 구식이어서 일 수 있습니다. 이런 문제는 제가 도와드릴순 없습니다. 하지만, 컴파일 하려는 프로그램의 설계가 형편없어서 컴파일러가 컴파일할 때 수백개의 헤더파일과 수만라인의 코드를 검사해야하는 경우도 있습니다. 원칙적으로는 이런 문제는 피할 수 있습니다. 만약 이 문제가 사용중이신 라이브러리 공급업체의 설계에 있다면 할 수 있는것이 거의 없습니다 (라이브러리나 공급업체를 변경하는 것을 제외하곤), 하지만 수정 후 재컴파일을 최소화하기 위해 코드의 구조를 바꿀 수 있습니다. 재컴파일을 최소하 하는 디자인은 전형적으로 더 나은, 더 유지보수에 유용하며, 관계의 분리에 더 좋은 모습을 보여주기 .. 2019. 1. 15.