출처 C++의 멤버함수 중 클래스 안에서 직접 선언하지 않으면 컴파일러가 자동으로 선언해주는 함수들 : 기본형 생성자 / 복사생성자 / 복사대입연산자 /소멸자 Class Empty{}; //위와 아래는 서로 같다 Class Empty { public: Empty() {} // 생성자 Empty(const Empty& ) {} // 복사생성자 ~Empty() {} // 소멸자 Empty& operator=(const Empty&) {} // 복사대입연산자 } 생성자 Empty() {} 출처 멤버 변수의 초기화 메모리에 생성된 객체는 모든 멤버 변수를 초기화하기 전에는 사용할 수 없다. 특히 객체의 멤버 중 private 멤버에는 직접 접근할 수 없기 때문에 일반적인 초기화 방식으로 초기화가 불가능하다. 따..
참조자(Reference) 할당된 하나의 메모리 공간에 다른 이름을 붙이는 것, 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름 (=별명) 포인터와의 차이 - 이미 선언되어 있는 변수에 대해서만 참조자 선언이 가능 = 참조자 선언과 동시에 누군가를 참조해야 한다. = NULL값이 없다 - 한번 지정한 객체를 변경할 수 없다. int main(void) { string str = "hello world"; string* ptr = &str; string& ref = str; // str = *ptr = ref } 위처럼 변수와 참조자를 동시에 선언하여 사용하는 상황보다는, 참조자가 함수에 활용되는 경우가 많다. 함수에 인수를 전달하는 3가지 방법 출처 값으로 전달 = 기본 자료형의 값을 전달할 때 ..
메모리의 구조 출처 프로그램이 실행되면 운영체제가 메모리(RAM)에 공간을 할당한다. 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간엔 4가지가 있다. 1. 코드(code) 영역 함수, 제어문, 상수 등이 저장된다. 우리가 작성한 소스코드가 들어가는 부분. 텍스트영역이라고도 부른다. 2. 데이터(data) 영역 전역변수와 static 변수가 저장된다. 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 3. 스택(stack) 영역 지역 변수와 매개변수가 저장된다. 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다. 컴파일 시에 크기가 결정된다. 4. 힙(heap) 영역 사용자가 직접 관리하는 영역. 사용자에 의해 메모..
객체지향(OOP: Ojbect-oriented programming) 속성과 동작을 함께 결합하여 재사용 가능한 패키지로 만드는 기능을 제공 - 함수를 작성하는 데 초점을 맞추기보다는 명확하게 정의된 동작 세트가 있는 객체를 정의하는 데 중점을 둔다. 누가 주체이고, 어떤 행동을 할지 분명히 알 수 있다. - 프로그램을 보다 모듈화된 방식으로 작성할 수 있고, 더 쉽게 쓰고 이해할 수 있으며, 더 높은 수준의 코드 재사용성을 제공한다. 클래스 객체 지향 프로그래밍에서, 우리는 종종 우리의 타입이 데이터를 보유할 뿐만 아니라, 데이터와 함께 작동하는 기능을 제공하기를 원한다. C++에서는 이 작업을 class 키워드를 통해 수행한다. 구조체 선언과 마찬가지로 클래스 선언은 정의만 할 뿐 메모리에 할당되지 ..
#include using namespace std; 네임스페이스(namespace) 출처 네임스페이스란 이름이 기억되는 영역을 뜻하며, 이름이 소속된 공간을 의미한다. C++에서는 변수, 함수, 구조체, 클래스 등을 서로 구분하기 위해서 식별자(identifier)로 다양한 이름을 사용한다. 네임스페이스는 C++ 프로그램을 작성할 때 발생하는 이름에 대한 충돌을 방지해 주는 방법을 제공한다. C++ 표준 라이브러리의 모든 기능은 std라는 namespace 안에 있다 cf) [C++] using namespace std를 사용하면 안되는 이유 global로 namespace를 선언한다면 namespace에 선언된 함수나 다른 요소들의 이름이 겹칠 수 있기 때문에 뜻하지 않았던 오류를 발생시킬 수 있다...