반응형

char path_buffer[MAX_PATH];        // 전체 경로

char drive[MAX_DRIVE];               // 드라이브 명

char dir[MAX_DIR];                      // 디렉토리 경로

char fname[MAX_FNAME];           // 파일명

char ext[MAX_EXT];                    // 확장자 명

// 입력된 문자열로 부터 경로를 만든다.

_makepath(path_buffer, "c", \\temp\\1111\\, "filename_test", "txt");

printf("Path created with _makepath: %s\n\n", path_buffer);

// 입력한 전체 경로를 각각 쪼개서 저장한다.

_splitpath(path_buffer, drive, dir, fname, ext);

printf("Path extracted with _splitpath:\n");

printf(" Drive: %s\n", drive);

printf(" Dir: %s\n", dir);

printf(" Filename: %s\n", fname);

printf(" Ext: %s\n", ext);


Path created with _makepath: c:\temp\1111\filename_test.txt

Path extracted with _splitpath:

 Drive: c:

 Dir: \temp\1111\

 Filename: filename_test

 Ext: .txt

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

C언어 출력타입 %d, %f, %e, %o, %x, %u, %g ......  (0) 2013.12.11
정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
반응형

C언어 출력타입 %d, %f, %e, %o, %x, %u, %g ......


%d: 10진수(정수형)

%f: 실수형

%e: 지수형

%o: 8진수

%x: 16진수

%u: 부호없는 10진수

%g: 실수형 자동출력

%p: 포인터의 주소

%c: 하나의 문자로 출력

%s: 문자열

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

디렉토리 분리함수 _splitpath  (0) 2015.06.16
정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
반응형

정적 바인딩

컴파일 시점에서 포인터 변수의 자료형에 의해서 호출될 함수가 결정되는 것.

 

동적 바인딩

컴파일할 때 호출할 멤버함수를 결정하지 않고, 프로그램이 실행되는 동안에 즉, 함수 호출이 실제로 일어나는 시점에서 멤버함수가 어떤 클래스의 멤버함수인지를 결정하도록 하는 것.

프로그램 실행 중에 포인터 변수가 가리키는 실체는 매번 변경되므로 동일한 포인터 변수로 함수를 호출하더라도 바인딩 되는 함수가 융통성 있게 바뀌어 호출되는 것.

 

virtual 키워드를 사용한 가상함수

C++에서 기본적으로 모든 함수가 정적 바인딩을 한다.

하지만 경우에 따라서 동적 바인딩이 필요한 경우에는 동적 바인딩을 하고자 하는 함수가 선언되어 있는 부모 클래스에 가서 함수를 선언(원형정의) 할 때 virtual 이라는 키워드를 함수의 선언 앞에 덧붙인다.

 

virtual void Prn();

 

virtual 키워드가 붙어서 동적 바인딩을 하는 함수를 가상함수라고 한다.

 

어떤 함수가 호출 될지 프로그램 실행 전에 결정 되는 것과 프로그램 실행 중에 호출 될 함수가 결정되는 것은 차이가 있다. 

C++ 에서는 가상 함수, 즉 dynamic binding을 통해 포인터가 가리키는 객체에 따라 각기 다른 동작을 할 수 있는 다형성을 구현할 수 있다.

 

* 정리

 - 정적 바인딩은 컴파일할 때 호출될 함수를 결정한다.

 - 모든 함수는 기본적으로 정적 바인딩을 한다.

 - 동적 바인딩은 호출될 함수를 결정한다.

 - 동적 바인딩을 위해서는 가상함수로 선언되어야 한다.

 - 가상함수는 기반클래스의 함수 선언문 맨 앞에 예약어 virtual를 덧붙인다.

 - 가상함수는 상속된다.

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

디렉토리 분리함수 _splitpath  (0) 2015.06.16
C언어 출력타입 %d, %f, %e, %o, %x, %u, %g ......  (0) 2013.12.11
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
반응형

상속(Inheritance)

 

객체 치향 언어의 대표적인 특징 중의 하나, 상속(Inheritance)

프로그램을 개발하다 보면 중복되는 내용이 많다.

이렇게 중복되는 코드를 단순히 복사해서 사용하는 것보다 이미 개발한 소스를 더 체계적으로 재활용하기 위한 방법.

 

상속이란 자식이 부모가 가지고 있는 재산이나 권력을 불려받는다는 의미

특정(자식) 클래스는 다른(부모) 클래스가 가지고 있는 모든 멤버변수나 멤버함수를 사용할 수 있다.

 

- 부모 클래스

Class Parent

{

public: void ParentPrn();

}

 

- 부모 클래스의 상속을 받는 자식 클래스

Class Child: public Parent

{

public: void ChildPrn();

}

 

protected 멤버의 사용

 

액세스 지정자 

자신의 클래스

 파생 클래스

클래스 외부 

 private

O

X

 protected

O

O

X

 public

O

 

private 는 파생클래스에서 접근하는 것을 허용하지 않는다.

public 는 파생클래스에서 접근하는 것을 허용하지만, 외부에서도 접근 가능하게 된다.

 

객체 지향 언어의 기본 특징인 캡슐화란 개념을 고수하면서 상속이 가능하도록 하기 위해서 제공되는 액세스 지정자가 바로 protected 이다. 부모가 되는 기반 클래스의 멤버변수들을 protected 로 지정해 두면 상속 가능하게 되어 파생 클래스에서 사용이 가능하지만 외부에서는 접근 불가능하게 된다.

 

오버라이딩과 오버로딩

오버라이딩과 오버로딩은 다형성을 지원하는 기술이라는 점에서는 매우 유사하다. 오버라이딩은 상속이란 개념에서 함수의 원형이 완전히 동일한 함수를 파행(하위) 클래스에서 사용하고자 할 때 새롭게 정의하는 것이다. 오버로딩은 동일한 이름을 다양한 일을 수행할 수 있도록 하기 위해서 함수의 원형을 달리해서 여러번 정의하는 것이다.

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

C언어 출력타입 %d, %f, %e, %o, %x, %u, %g ......  (0) 2013.12.11
정적 바인딩과 동적 바인딩  (0) 2013.07.08
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
객체지향 언어의 특징  (0) 2013.06.03
반응형

함수를 만들어서 컴파일 하면 각각의 코드가 기계어로 번역되어 메모리 상의 어딘가에 저장된다.

그리고 이 함수를 호출하는 부분에는 그 함수가 위치한 메모리 번지가 저장된다.

프로그램을 실행하면 명령어가 차례로 수행되다가 함수를 호출하는 부분을 만나면, 

이 함수가 있는 메모리 번지로 점프를 해서 그 함수를 실행하고, 원래 위치로 되돌아 온다.

이와 같이 함수를 호출하는 부분에 함수가 위치한 메모리 번지를 연결시켜 주는 것을

바인딩이라고 한다. 함수를 바인딩 하는데는 두가지 방법이 있다. 

 1. 정적 바인딩

 2. 동적 바인딩


1. 정적 바인딩

일반적인 함수는 실행 파일을 만들 때 바인딩을 할 수 있다.

즉, 컴파일을 해서 실행파일을 만드는 단계에서 함수를 호출하는 부분과 그 함수가 저장되는 부분을 연결시킬 수 있다.

* 실행파일을 만들 때 호출될 함수로 점프할 번지가 결정되어 바인딩되는 것을 정적 바인딩이라고 한다.


2. 동적 바인딩

실행 파일을 만들 때는 바인딩이 되지 않고, 보류 상태로 두었다가 프로그램이 실행될 때 바인딩 되도록 할 수가 있다.

* 실행 파일을 만들 때는 호출될 함수로 점프할 번지를 결정하지 않고 빈칸으로 두었다가,

프로그램을 실행할 때 점프할 번지를 즉성에서 결정하여 함수를 실행하도록 하는 것을 동적 바인딩이라고 한다.


동적 바인딩의 단점

① 프로그램을 실행하는 중에 바인딩을 해야 하기 때문에 거의 무시할 수 있을 만큼이긴 하나 

    정적 바인딩을 하는 경우보다 수행 속도가 떨어진다.

② 바인딩에 필요한 메모리 번지를 저장할 포인터를 가지고 있어야 하므로, 

    정적 바인딩을 할 때는 필요없는 메모리가 함수 당 4바이트씩 더 필요하다.


반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
가상함수  (0) 2013.06.03
객체지향 언어의 특징  (0) 2013.06.03
Visual leak detector  (0) 2013.05.03
반응형

가상함수란??

함수를 선언할때, 앞에 virtual 이라는 키워드를 붙여부면, 그 함수는 동적바인딩을 사용한다.

즉, virtual 이라는 말에서 "가상"은, 이 함수를 호출했을 때, 

함수를 실행하기 위해 실제함수가 있는 번지로 점프를 하게 되는데, 

실행 파일에는 점프할 번지가 존재 하지 않는다는 뜻에서 붙여진 말이다.

가상 함수 외의 일반적인 함수는 모두 정적 바인딩을 사용한다.

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
객체지향 언어의 특징  (0) 2013.06.03
Visual leak detector  (0) 2013.05.03
반응형

C++ 은 객체지향 언어(Object-Oriented Language)이고, C 언어는 절차적 언어(Procedural Language)이다.

객체지향 언어의 특징은 3가지가 이다. 각각의 특징은 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism) 이다.

1. 캡슐화(Encapsulation): 데이터와 데이터의 행동 양식을 결정하는 코드를 한 번에 묶는 구조로 내부의 정보를 외부에 노출하지 않음.

2. 상속(Inheritance) : 특징, 장점을 분리해 놓은 클래스를 분리하여 사용

3. 다형성(Polymorphism) : 객체들의 타입이 다르면 같은 메시지가 전달되어도 서로 다른 동작을 하는 것.

객체지향에서 하나의 코드로 다양한 타입의 개체를 처리하는 기술.

반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
Visual leak detector  (0) 2013.05.03
반응형

출처: http://www.codeproject.com/Articles/9815/Visual-Leak-Detector-Enhanced-Memory-Leak-Detectio


빌드시 나타나는 메모리릭을 찾을수 있는 방법입니다.

우선 아래에 버전에 맞게 파일을 다운로드 합니다.


- 비주얼 스튜디오 6.0

Vld_VS6.0.zip

- 비주얼 스튜디오 2005

Vld_VS2005.zip


사용방법: 비주얼 스튜디오 6.0기준

1. Tool -> Options... -> Directories -> Include files 경로 추가

2. Tool -> Options... -> Directories -> Library files 경로 추가

3. Tool -> Options... -> Directories -> Source files 경로 추가

4. main 함수 위에 #include "vld.h" 라인 추가

5. 프로젝트 폴더 안에 vld.dll, dbghelp.dll 붙여넣기

6. Debug 모드로 빌드

위에 순서대로 빌드시 메모리릭이 발생한 부분을 찾을 수 있습니다.



반응형

'프로그래밍 > C, C++' 카테고리의 다른 글

정적 바인딩과 동적 바인딩  (0) 2013.07.08
상속(Inheritance)  (0) 2013.07.07
바인딩  (0) 2013.06.03
가상함수  (0) 2013.06.03
객체지향 언어의 특징  (0) 2013.06.03

+ Recent posts