본문 바로가기

string 클래스 문자열 처리 함수들은 string.h(C++에서는 cstring)을 통하여 지원한다. string 클래스는 string헤더 파일을 통해 지원된다.(string.h와 cstring 헤더 파일은, string클래스가 아니라 C스타일의 문자열을 처리하는 C 라이브러리 문자열 함수들을 지원하는 것이다.) 문자열 생성 string(const char * s) string 객체를 s가 지시하는 NBTS로 초기화 한다. string(size_type n, char c) 문자 c로 모두 초기화된 원소 n개의 string 객체를 생성한다. string(const string & str, size_type pos = 0, size_type n = npos) string 객체를 size_type pos = 0 으로 초기화한.. 더보기
데이터형 변환 연산자 데이터형 변환 과정을 더욱 엄격하게 규정한다. dynamic_cast const_cast static_cast reinterpret_cast dynamic_cast 어떤 클래스 계층 내에서 업캐스트를 허용하고, 다른 데이터형 변환은 허용하지 않는것 dynamic_cast (expression) const_cast 어떤 값을 const나 volatile로 또는 그 반대로 변경하는 것이 유일한 목적인 데이터형 변환을 위한 것이다. const_cast (expression) 이와 같은 데이터형 변환의 결과는 그 데이터형의 다른 어떤 측면이 변경되면 에러이다. 즉, type_name과 expression은 const나 volatile이 있느냐 없느냐에 따라 달라지는 것만 빼고는, 데이터형이 동일해야 한다. 예를.. 더보기
리눅스 부트 시퀀스 다음은 리눅스 부팅 과정을 요약합니다. 이 글을 읽기 전에 앞서 PC 부팅 시퀀스(http://hermet.pe.kr/102451404)를 먼저 참고하시면 도움이 될 겁니다. 기본적인 BIOS를 통해 부팅 준비가 끝나면 하드디스크의 첫 번째 섹터, MBR(Master Boot Record)을 통해 실제 운영체제가 있는 섹터를 읽어들이게 됩니다. (MBR에 대한 자세한 정보는 임베디드 개발자를 위한 파일시스템의 원리와 실습, 한빛미디어 58p-64p 참고 바람) 리눅스는 80x86 시스템 부트로더로 LILO(LInux LOader) 또는 GRUB(Grand Unified Bootloader )를 사용하며 유연한 부팅이 가능한데, LILO는 다음과 같은 작업을 수행합니다. (참고로 BIOS는 부트 로더를 램.. 더보기
부트시퀀스 이전 게시물(http://hermet.pe.kr/tb/102451404)을 보강하여 boot sequence를 좀 더 구체화 해보았습니다. 1. PC에 전원이 들어오면 컴퓨터를 부팅하기 위한 특별한 하드웨어 회로가 CPU의 리셋 핀으로 어떤 논리 값을 전달함. BIOS 루틴이 시작. 2. 레지스터 영역과 파워 관리 영역을 초기화. 프로세서의 cs 및 eip 를 포함한 몇몇 레지스터에 미리 정해진 값을 설정 후 0xfffffff0 물리 주소의 코드르 실행. 이게 ROM에 들어있는 BIOS임. BIOS는 리얼모드 주소를 사용하며 따라서, GDT, LDT가 필요없음. 오직 세그먼트 x 16 + OFFSET으로 주소 접근. 3. 인터럽트 핸들러와 장치 드라이버를 로드. 이때 인터럽트 벡터 역시 초기화. 이 인터.. 더보기
RTTI(runtime type identification) RTTI(runtime type identification) - 실행 시간 데이터형 정보 어떤 C++ 시스템들은 RTTI 기능을 켜거나 끌 수 있는 설정을 가지고 있다. RTTI의 목적은, 프로그램이 실행 도중에 객체의 데이터형을 결정하는 표준 방법을 제공하는 것이다. RTTI의 목적 하나의 공통 기초 클래스로부터 상속된 클래스 계층이 있다고 가정하자. 이 클래스 계층에 속해 있는 클래스들의 어떤 객체를 기초 클래스 포인터가 지시하도록 설정할 수 있다. 그 다음에, 어떤 정보를 처리한 후 이들 클래스들 중에서 어느 하나를 선택하고, 그 클래스형의 한 객체를 생성하고, 기초 클래스 포인터에 대입하기 위해 그 객체의 주소를 리턴하는 함수를 호출한다. 그 포인터가 지시하는 객체의 종류가 무엇인지 어떻게 알 수.. 더보기
[C++] 프렌드, 예외, 기타 사항 프렌드 클래스의 모든 메서드는 오리지널 클래스의 private 멤버와 protected 멤버에 접근할 수 있다. 또한 더욱 제한을 가하여 어떤 클래스의 특정 멤버 함수들만 다른 클래스의 프렌드가 되도록 지정할 수 있다. 클래스는 함수, 멤버함수, 클래스 중 어떤 것이 프렌드인지 정의한다. 프렌드 관계는 바깥 세계에서는 설정할 수 없다. 그러므로 프렌드들이 클래스의 private 부분에 대한 외부 접근을 허용하더라고도 그들이 객체 지향 프로그래밍 철학을 실제로 위반하는 것은 아니다. 오히려 public 인터페이스에 더 많은 융통성을 제공한다. 1. 프랜드클래스 Tv 클래스와 리모콘 클래스 사이의 관계 friend class Remote; 프렌드 선언은 public, private, protected 부분 .. 더보기
C++ 입력, 출력, 파일 cin.get(); cin.get(); return 0; 17장 입력, 출력, 파일 int eggs = 12; char * amount = "dozen"; cout 더보기
보이어-무어 알고리즘 보이어-무어 알고리즘 Boyer-Moore string search algorithm http://en.wikipedia.org/wiki/Boyer–Moore_string_search_algorithm http://www.cs.utexas.edu/users/moore/ http://bric.postech.ac.kr/cyberedu/seminar/ksh1/basicalgo2/sld003.htm 1975년에 고안된 알고리즘으로, 텍스트 패턴 매칭에서는 KMP(Knuth-Pratt-Morris) 알고리즘과 함께 가장 빠른 매칭 알고리즘으로 알려져 있다. 텍스트 에디터와 같은 응용 분야에서 가장 널리 사용된다고 함. (아..그래서 자격증 시험에도 나오는건가??) --------------- quote ---.. 더보기
임베디드에서 자주 사용되는 연산 &= 와 |= 마스커 &=[~] : 선택된 비트 패턴 클리어 rGPECON &=~((0x3 더보기
[C++]Critical Section class CS_Guard { public: CS_Guard() { InitializeCriticalSection(&m_cs); ::EnterCriticalSection(&m_cs); } ~CS_Guard() { ::LeaveCriticalSection(&m_cs); DeleteCriticalSection(&m_cs); } private: CRITICAL_SECTION m_cs; }; 더보기