C++ 언어
-
복사생성자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. 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를 가..
-
참조형과 포인터C++ 언어 2020. 3. 26. 17:50
1. 참조자 사용법 #include #include int _tmain(int argc, _TCHAR* argv[]) { // (int &) => 참조 자료형 / (int *) => 포인터 자료형 int a = 0; // 참조 자료형(참조형) 을 가지는 변수의 선언 int& i = a; // 포인터 자료형을 가지는 변수 선언 int* ptr_i = &a; return 0; } 위의 코드는 참조형 (참조 자료형의 변수) 와 포인터 (포인터 자료형의 변수)를 각각 생성한 것이다. 아래 자료를 보면서 차이를 확인해 보자 변수 a => 주소 0x 0082FEFC 참조자 i => 주소 0x 0082FEFC 포인터 prt_i => 주소 0x 0082FEE4 이며 해당 주소의 메모리의 값은 0082FEFC 이다. 참..
-
C++ 메모리 동적할당 및 해제 ( new & delete )C++ 언어 2020. 3. 26. 15:31
C 에서 할당은 malloc 함수와 해제는 free 함수를 사용하여 런타임에 메모리를 추가적으로 동적 할당하여 사용한다. 하지만 C++ 에서는 메모리 동적할당시 함수를 Call 하여 메모리를 할당하는 방식이 아닌 연산자를 사용하여 추가적인 메모리를 할당한다. 이때 사용하는 연산자가 new, delete 연산자이다. new 연산자 new 연산자가 하는 역할은 malloc 함수와 동일하다. 프로그램이 동작 중 일때 추가적인 메모리 사용 또는 기존의 stack 메모리의 크기를 벗어나는 큰 규모의 자료를 다룰 때 heap 영역의 메모리를 사용하여 데이터를 읽고 쓴다 이때 heap 메모리를 사용할 수 있게 해주는 것이 malloc 함수이다. // HelloNew_C+.cpp : 콘솔 응용 프로그램에 대한 진입점을..