C++ bit OR 연산 여러개의 설정값(True of False - Flag)를 저장하고 확인할 때, 유용하게 사용할 수 있는 방법이다. 구조체를 선언해 여러 개의 bool 변수를 만들어 주거나, 또는 단순히 여러 개의 FLAG이름을 붙인 bool 형식 변수를 만들어도 되지만, bit 연산을 통해 변수 하나에 여러 개의 flag(true or false) 설정값을 저장할 수 있다. 위 사진은 VC++ 의 기본 헤더 파일인 "winnt.h" 에 정의되어 있는 것 중 PE 포맷의 NT_FILE_HEADER (COFF)에 쓰이는 Characteristics 상수 설정값이다. 각각의 설정 값이 비트 단위와 딱 맞아떨어져, 여러 값이 설정되도 서로 다른 비트를 침범하지 않아 여러 설정(flag)를 저장할 수 있..
C언어 _ new, delete흔히 동적 배열을 위해 메모리를 할당받거나, 해제할 때 쓰는 malloc과 free와 비슷하게 사용된다. (둘다 힙 메모리 영역을 할당하게 된다.) 사용방법int *ptr_malloc = (int *)malloc(sizeof(int) * 4); // with mallocint *ptr_new = new int[10]; // with new ! 동적으로 할당(malloc, new)를 해준 메모리 영역은 반드시 사용이 끝나면 각각 free, delete로 초기화를 해주어야 한다.! new나 malloc통해 생성하지 않은 클래스, 구조체는 스택에 할당된다. 메모리 해제 시:free(ptr_malloc);delete ptr_new[]; // delete의 경우에 대상이 배열인 경우..
연산자 오버로딩 #include "stdafx.h" class Box { private: int var01, var02; public: Box(int arg0, int arg1) : var01(arg0), var02(arg1) {} void Show() { printf("%d %d\n", var01, var02); } Box operator+(Box &old) { // box2 - old // myBox02 : addr // Automatically used by ptr! (&) printf("start op\n"); return Box(var01 + old.var01, var02 + old.var02); } }; int main() { Box myBox01(10, 20); Box myBox02(1, 2..
가상 함수#test01 #include "stdafx.h" class Parent { public: void Call() { printf("System!! executed Parent::Call!!\n"); } }; class Child : public Parent { public: void Call() { printf("System!! executed Child::Call!!\n"); } }; int main() { Parent P, *pP; Child C; pP = &P; pP->Call(); // parent pP = &C; pP->Call(); // parent } Parent 클래스 P와, Child클래스 C를 선언하였음.포인터 접근으로 Parent에서 Call 메소드를 실행하면 당연히 Pare..
구조체란?다양한 형의 자료를(변수를) 하나로 통합한다. 또한 필요에 따라 메소드를 사용할 수 있다.접근 제한 연산자를 사용할 수 있으며, 사용하지 않을 경우 기본적으로 public 접근자가 사용된다. 클래스란?다양한 형의 자료와, 함수(메소드)를 하나의 객체로 통합하는데 사용할 수 있다.접근 제한 연산자를 사용할 수 있으며, 사용하지 않을 경우 기본적으로 private 접근자가 사용된다. 클래스에 대한 멤버함수는 일반 함수들이 오버로드될 수 있는 것처럼 오버로드될 수 있으며,클래스를 사용하고자 하는 타인이 오직 인터페이스(interface or public methods)만 알고, 내부 구현이 어떻게 이루어졌는지 알 필요가 없도록 인터페이스와 구현부를 각각 분할해 사용해야 한다. (OOP - 캡슐화 / ..
클래스 상속 #include "stdafx.h" #include "malloc.h" #include "string.h" #define SZ_ALLOC_CHAR 10 class Human { protected: int age; char* name; public: Human(int _age, char* _name) : age(_age) { this->name = (char *)malloc(SZ_ALLOC_CHAR); } }; class Student : Human { private: int grade; char* school; public: Student(int _age, int _grade, char* _school, char* _name) : Human(_age, _name) { this->school ..
** 어셈블러 언어 분석은 Handray 에서 다시 다룸 (컴파일러에 따라 예상했던것과는 코드가 많이 달라짐) 클래스 사용 - 기초#include "stdafx.h" #include "malloc.h" #include "string.h" #define SZ_ALLOC_CHAR 10 class student { private: int age; public: char* name; char* university; void SetInfo(char* _name, int _age, char* _university) { strncpy(name, _name, SZ_ALLOC_CHAR); strncpy(university, _university, SZ_ALLOC_CHAR); age = _age; } void About(..
객체지향 프로그래밍(OOP) 객체지향 프로그래밍이란? 컴퓨터 프로그래밍의 패러다임 중 하나이다.절차 지향의 경우 - 수행되어야 할 연속적인 계산 과정을 포함하고 있는 프로그램을 지향.객체 지향의 경우 - 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나,여러 개의 독립된 단위, 객체들의 모임으로 파악하고자 함. (각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있다.) 기본적인 구성 요소1. 클래스(class)문제 해결 또는 특정한 기능을 하기 위한 속성(arrtibute - 자료를 담을 수 있는 변수)와 행위(behavior - method(procedure))를 정의한 것으로,객체지향 프로그래밍의 기본적인 사용자 정의 데이터형(user defined data type)이라고 할 수 있다...
Assert 함수 이용#include // #define NDEBUG #include int main() { int val, test; val = 3; test = 5; assert(val == test); print("passed assert"); }프로그램을 개발하거나, 테스트 할 때, assert 함수에 전달된 인자값의 expression이 1(true)가 아니라면,경고와 함께 프로그램의 실행을 중지하고, 메모리 코어 덤프를 생성한 다음(시스템이나 설정에 따라 다름),프로그램에서 에러가 난 소스 코드의 라인을 다음과 같이 표시해 준다.또한 최종적으로 개발 완료 후 프로그램을 배포할 때, 더이상 assert문이 필요 없을때 일일히 함수 코드를 지울 필요 없이,"#define NDEBUG"로 asser..
함수 오버로딩 (Overload)C++ 에서는 같은 함수 이름으로 두 가지 이상의 정의를 갖는 것을 용인한다.(같은 함수 이름으로 두 가지 이상의 함수 정의가 주어지는 거슬 함수 이름 오버로딩이라 부른다) 예제 코드 #include "stdafx.h" #include "malloc.h" #include "memory.h" #include "string.h" // Pre defined function. (used in main) double ave(double n1, double n2); double ave(double n1, double n2, double n3); int main(int argc, char *argv[], char* envp) { printf("%.2f\n", ave(3, 5)); pr..