구조체란?다양한 형의 자료를(변수를) 하나로 통합한다. 또한 필요에 따라 메소드를 사용할 수 있다.접근 제한 연산자를 사용할 수 있으며, 사용하지 않을 경우 기본적으로 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..
구조체 #include "stdafx.h" #include "malloc.h" typedef struct struct_typedef { int power; int age; } struct struct_default { int power; int age; } int main(int argc, char *argv[], char* envp) { struct struct_default struct01; struct_typedef struct02; } ! 구조체는 "typedef struct NAME" 또는 "struct NAME" 으로 선언할 수 있다.다만 첫번째 방법으로 선언했을 때는 바로 이름을 변수처럼 이용해 변수를 만들 수 있으나,두번째 방법으로 선언했을 때는 변수 타입 앞에 struct를 붙여 주어야 ..
포인터 배열 #include "stdafx.h" #include "malloc.h" int main(int argc, char *argv[], char* envp) { char *test = "123456"; // "123456" 의 주소값 char *test1 = "987654"; // "987654" 의 주소값 char c = '1'; // '1' 문자 char *ptr_array[] = {"123", "456"}; // 문자열을 배열로 가져올 수 있다. char *ptr_array2[] = {test, test1, &c, (char *)malloc(100)}; printf("%s\n", *ptr_array); // 123 printf("%s\n", *(ptr_array + 1)); // 456 pr..
기본적인 문자열 할당 및 포인터 사용 - Heap #include "stdafx.h" #include "string.h" #include "malloc.h" const char *pcChar = "Test const string"; #define ALLOC_SIZE 100 int main(int argc, char *argv[]) { // '\0' 문자열을 포함해 99바이트를 저장할 수 있다.(ascii) char *test = (char *)malloc(ALLOC_SIZE); test[ALLOC_SIZE-1] = '\0'; printf("%d\n", strlen(test)); strncpy(test, pcChar, strlen(pcChar) + 1); printf("%d\n", strlen(test))..
BOF 원정대 - Level1 gate 1. C 코드 및 어셈블리 확인 int main(int argc, char *argv[]) { char buffer[256]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } .text:08048430 public main .text:08048430 main proc near ; DATA XREF: _start+17o .text:08048430 .text:08048430 dest = byte ptr -100h .text:08048430 argc = dword ptr 8 .text:08048430 argv = dword ptr 0Ch .t..