본문 바로가기

가상함수 구조 C++를 하다보면, 가상함수 호출하는 방식이 궁금했었다. 어떻게 다른 클래스로 캐스팅해서 원하는 가상함수를 호출하는지 정말 신기했다. 그래서 찾아봤다. 작성: http://ospace.tistory.com/(ospace114@empal.com),2010.12.07 사용할 예제코드 다음은 단순한 상속예제이다. Base 클래스에는 두 개의 가상함수가 정의되어 있고, Derived 클래스에 한개의 가상 함수를 구현하고 있다. class Base { private: int valBase; public: virtual int getValue() { return this->valBase; } virtual char* getName() { return "Base"; } }; class Derived : public .. 더보기
C에서 C++ 호출하기 C에서 C++호출하는 괜찮은 방법을 찾아서 알려드립니다. 테스트해본 결과 VC++, GCC에서도 적용 가능합니다. 작성: http://ospace.tistory.com/,2010.11.30 (ospace114@empal.com) 파일 구성 예제 소스 파일은 3개로 구성되었습니다. Counter.h C++헤더파일이자 멤버함수가 정의됨 별도 cpp파일은 없습니다. 물론 작성도 가능합니다. counter_c.h C에서 사용할 헤더파일 이 파일은 Counter.h에 포함되어도 됩니다. counter_c.cpp counter_c.h에 있는 내용을 구현한 부분. 주의할 것은 cpp로 C++로 컴파일된다. 이는 Counter.h의 cpp파일이 있다면 같이 포함해도 되며, 분리해도 됩니다. 위의 구현은 C++ 구현부와.. 더보기
데이터 값을 비트 문자열로 변환 프로그래밍 하다보면 간혹 데이터 값을 이진수로 출력하고 싶을 때가 있다. 매번하기에 매우 귀찮은 작업이다. 그래서 간단하게 작성해서 만들어본다. 작성:[http://ospace.tistory.com/(ospace114@empal.com) 2009.12.23 코드 단순히 작성한 것이라서 자세한 에러처리는 본인이 직접하길 바란다. 잘못하면 버퍼 오버플로 발생할 수 있다. ^^; enum { BIT_BUF_LEN = 512 }; char* bitToStr(char* val, int len) { static char buf[BIT_BUF_LEN]; int l = 0; int i = 0; memset (buf, 0, BIT_BUF_LEN); #define PRN_BIT(v) (v) ? (buf[l++] = &#3.. 더보기
[링크에러 LNK2019] C++에서 C 함수 사용하기 C++에서 C에 함수를 사용시 주의해야하는 사항이 있다. 아무 생각없이 C 함수를 사용한다면, 무시무시한 링크오류의 늪에 빠져들고 만다. 늪에 빠져든다고 해도 정신만 차리면 나올 수 있다. 작성일: 2009.09.02 (http://ospace.tistory.com/), ospace114@empal.com 단순히 링크 오류에 대해서만 찾고 계신다면 혹시 아래와 같은 상황이라면 이 글을 읽어보길 바란다. C++ 프로그래밍을 하고 있고 다른 곳에 예제를 그대로 사용하고 있는데 링크에러가 뜬다. include나 lib 폴더도 정확하고 불러오는 라이브러리 파일도 정확한데 링크에러가 뜬다. 컴파일러 옵션이나 링크 옵션도 이리저리 바꿔보아도 링크에러가 뜬다. 다른 함수는 이상이 없는데 특정 일부 함수만 링크에러가 .. 더보기
C로 객체지향 흉내내기2 거의 "Object Oriented Programming in ANSI C"내용을 번역하는 수준이군요. 사실 중간에 내용은 임의대로 제 마음대로 이해한 내용으로 채워넣은 경우도 있으니, 혹시 의문이 들거나 이게 아니다 싶으면 원문을 참고하세요. 이번에는 동적 링크와 제너릭 함수입니다. 동적 링크는 정적링크와는 다르게 실행시점에 실행되는 코드가 결정된다. 제너릭 함수란 어떤 타입이는 모두 실행할 수 있는 함수이다. 먼처 C++과 비슷하게 생성자와 소멸자를 보고 메소드와 메시지 클래스 등에 대해서 다뤄보겠다. 작성일: 2009.07.26 (http://ospace.tistory.com/), ospace114@empal.com 생성자와 소멸자 C++을 해봤으면 생성자와 소멸자는 잘 알 것이다. 잘 모르게 구글.. 더보기
C로 객체지향 흉내내기1 아휴~ 일을 또 하나 만들어버렸다. 아직도 작성중인 자료가 많은데, 또 다른 작성중 문서를 만들어 버렸다. 언제 끝날지 모르겠다. 내용도 쉽지 않고, 이해하기도 어려워서 틀리거나, 이건 아니다 싶은 것도 많을 것 같다. "Object Oriented Programming in Ansi C"(이하 OOPC)라는 글을 참조 했다. 내가 찾아본 내용 중에 내가 의도했던 것과 가장 비슷한 내용이었다. 다음 내용은 상당 부분 앞의 글을 많이 번역했다. 사실 C로 완벽한 C++과 같은 구현한 한 코드들도 있다. 해당 글을 읽다 보면, 사용하기 복잡하며, 실행속도도 C++에 비해 그다지 큰 향상이 없다고 한다. 오히려 떨어진다고 한다. 이부분은 내가 검증해보지 못해서 장담하지 못하지만.. 이 내용은 하나의 컨샙으로 .. 더보기
Morden Programming의 Functor 모던 프로그래밍의 Functor이다. Functor를 우리말로 옮기면 함수자이다. 세부적인 설명은 하지 않겠다. 대충 코드를 간략하게 요약해서 함수자에 필요한 코드만 정리해다. // defaulttype.h #pragma once struct NullType {}; struct EmptyType {}; // typelist.h #pragma once #include "defaulttype.h" template struct Typelist { typedef T Head; typedef U Tail; }; #define TYPELIST_1(T1) Typelist #define TYPELIST_2(T1, T2) Typelist #define TYPELIST_3(T1, T2, T3) Typelist // Typ.. 더보기
전처리(preprocess) 중간 결과 확인하기 전처리(preprocess) 중간 결과 확인하기 Writer: http://ospace.tistory.com/(ospace114@empal.com) 2008.09.23 C++에서 define를 이용한 처리가 많다. 이런 define이 매크로서 사용하며 반복적인 작업이나 상수값으로서 사용한다. 그러나 실질적인 define문은 문자열 치환이라는 작업으로 이런 작업을 수행한다. 이를 전처리라고 한다. 이외에 전처리 종류가 더 있으나 이는 다른 곳에서 확인하길 바란다. 간혹 지금 작성한 전처리가 생각대로 생성지 않거나 제대로 작동하고있는지 확인하고 싶을때가 있다. 그 방법을 살펴보자. 사실 C++ 권장 사용법에는 매크로를 사용하지 말라고 한다. 물론 사용해도 된다고 하는 사람들도 있다. 사용을 지양하는 이유는 .. 더보기

반응형