프로그래밍
-
복사생성자C++ 언어 2020. 4. 6. 22:45
복사생성자란 ? 복사생성자는 말 그대로 객체의 복사본을 생성할 때 호출되는 생성자이다. 기본적으로 객체를 만들면 디폴트 생성자가 실행된다. 이때 만약 객체를 만들긴 만들었지만 해당 객체가 다른 객체의 복사본 으로 생성되었을 경우 복사생성자가 호출되게 되는 것이다. 아래 예시를 보자 // HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include #include class CMytest { public: // 디폴트 생성자 소멸자 CMytest() { this->m_nData = 10; std::cout m_nData = nParam; } private: int m_nData; }; // 복사 생성자 호출함수 // 매개변수로 C..
-
Class 멤버 함수의 선언 및 정의 분리C++ 언어 2020. 4. 2. 19:16
C 언어 C++ (반환 자료형) (함수 식별자) (매개 변수) (반환 자료형) (해당 함수의 소속 : : 함수 식별자) (매개 변수) 위의 자료는 C와 C++ 의 함수 선언시 기술해야 하는 내용을 표로 정리한 것이다. 기존의 C에서는 함수를 선언시 함수가 반환하는 자료형과 해당 함수의 이름 그리고 매개변수를 기술하면 함수가 선언된다. 하지만 C++ 에서는 Name Space 개념의 등장에 따라 각 함수, 변수 등에게 소속이 생기며 만약 함수가 Name Space에 속해 있을 시 해당 Name Space를 기술하여야 한다. class Test_func { public: Test_func(){ nData = 50; } int nData = 10 ; void test_func(Test_func* test_p)..
-
생성자 함수와 소멸자 함수C++ 언어 2020. 4. 2. 19:04
앞의 포스트를 이해했다면 C++ 에서 나오는 Class 의 개념은 C언어의 구조체와 함수를 묶어놓은 듯한 모양이라는 것을 알 수 있다. 여기서 더 나아가 C++ 에서는 Class 의 생성자와 소멸자 라는 개념의 함수를 지원한다. 생성자 함수에 대해서 살펴보자 생성자 함수란 ? 생성자 함수는 쉽게 말해 Class 의 객체가 생성되면 자동으로 Call 되는 함수를 말한다. 따라서 생성자 함수의 호출 시기는 사용자가 지정할 수 없다. 또한 생성자 함수의 역할은 Class의 멤버에 속한 자료들을 초기화 해주는 역할을 수행한다. 따라서 생성자 함수는 반환값 역시 없다. 아래 예시를 통해 자세히 알아보자 class Test_func { public: // 생성자 함수 // Test_func(){ nData = 50..
-
Class의 생성 과정C++ 언어 2020. 3. 31. 17:46
C 언어의 제작자 작성 구조체와 함수 가장 먼저 코드의 영역을 2가지로 나누어 생각해보자 첫 번째는 제작자 코드 영역이다. 제작자 코드 영역은 재활용 가능한 코드를 추후 사용자에게 제공하는 것이다. 즉 제작자 코드란 제작자가 만든 기능을 사용자가 원할 때 사용할 수 있게끔 만든 것이다. 두 번째는 사용자 코드 영역이다. 사용자 코드 영역은 제작자가 만들어서 제공해주는 코드를 실질적으로 가져다 사용하는 주체가 되는 영역이다. 아래 예시를 통해 이해해 보자 // HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include // 제작자 코드 // // 제작자 코드의 내용으로는 사용자로부터 // 나이와, 이름을 입력받는다. typede..
-
함수 템플릿과 인라인 함수C++ 언어 2020. 3. 30. 17:01
함수 템플릿이란? 함수 템플릿은 함수의 다중 정의 기능의 단점을 보완 해주는 기능이다. 함수를 다중정의 할 경우 같은 이름의 함수를 반환값, 매개변수 등에 따라 다른 기능을 수행하는 함수로 만드는 것을 말한다. 따라서 함수를 다중정의 할 경우 같은 이름의 함수가 여러개 생기는 것이다. 위와 같이 다중정의 함수를 사용한다면 사용자는 편의성과 확장성을 얻을 수 있지만 유지보수 측면에서 어려움을 겪는다. 예를 들어 다중정의 함수가 5개가 논리적 결함이 생긴다면 사용자는 5개 함수의 코드를 수정해야 할 것이다. 5개의 함수가 전부 사용되지 않는 다면 불필요한 코드가 생긴 것이며 메모리의 낭비로 이어진다. 이와같은 단점을 보완하기 위해 제공되는 기능이 함수 템플릿 이다. 템플릿은 일종의 틀 이며 판화의 틀을 만들..
-
컴파일 전 처리 (전처리기)C언어 2020. 3. 28. 15:32
전처리기란 ? 그동안 ~~~.c 와 같은 형태의 프로그램 파일을 작성하여 컴파일 하고 컴파일 된 오브젝트 파일을 링크하여 실행파일을 만들고 해당 실행파일을 Load 하여 실행하였을 것이다. 이때 컴파일 전에 처리하는 과정이 하나 있는데 이 과정을 전처리 과정이라 한다. 이 전처리 과정은 #include 라는 것을 작성하여 " 해당 구문은 컴파일 전에 처리해주세요 ~ " 라는 의미로 사용한다. ~~~.c : 프로그램의 실질적 동작이 기술된 정의 파일 ~~~.h : ~~~.c 파일에서 사용한 외부의 함수, 자료들이 선언된 파일 그동안 스탠다드 I/O 헤더파일에 정의 된 함수인 prinf, puts, gets 등의 표준 입출력 함수를 사용해 왔을 것이다. 이때 이러한 표준 입출력 함수는 사용자가 만들지 않고 ..
-
컴파일 최적화C언어 2020. 3. 27. 20:34
최적화란 ? 최적화 쉽게 말해 가장 알맞는 상태로 맞춘다는 의미이다. 그렇다면 누가 어떻게 무엇을 알맞는 상태로 맞춘다는 것인가 누가 ? 컴파일러가 어떻게 ? 쓸데없는 동작은 빼면서 무엇을 ? 코드에서 쉽게말해 컴파일러라는 도구가 작성된 코드를 분석하여 쓸모 없거나 비효율적인 동작을 파악하고 효율적은 코드로 탈바꿈 시켜주는 것을 이야기 한다. 아래 예를 한번 살펴보자 int main(int argc, char *argv[]){ // 변수 b는 변수 a에 대해 의존적이다. int a = 10; int b = a * 5; // 변수 d는 변수 c에 대해 의존적이다. int c = 20; int d = c * 5; // 변수a와 변수b는 변수c와 변수d와 서로 의존적이지 않다. // 즉 순서를 바꾸거나 동시에..
-
참조자의 내부 동작C++ 언어 2020. 3. 27. 14:09
// HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include #include #include // 참조자의 내부 구조 int _tmain(int argc, _TCHAR* argv[]) { int a(10), b(20); // 포인터의 구조적 문제는 포인터가 가리키는 값 즉 주소가 // 변질 될 수 있다. // 포인터 변수 사용 int* pn_data = &a; // pn_data는 변수이기 때문에 값이 변경 가능 pn_data = &b; // pn_data의 자료형은 int * 이기 때문에 해당 주소가 가리키는 메모리의 값 역시 변경 가능 *pn_data = 50; // 위와 같이 pn_data는 변수이기 때문에 &a를 가..