C++ 9

상속 (Inheritance)

코딩을 하다보면 어떤 클래스들이 공통적으로 가지는 속성이 있을 때, 이런 생각을 하게 됩니다. 따로 정의, 선언할 필요 없이 다른 클래스 내의 속성, 행동들을 물려받아 쓰면 어떨까. 이러면 코드의 양도 줄어들고 여러가지 이점을 누릴 수 있을 것입니다. 객체지향의 특성 중 하나인 상속에 대해 알아보겠습니다. .. class 부모클래스명{ // .. }; class 자식클래스명 : 접근제한자 부모클래스명 { // .. }; .. 상속은 위와 같이 쓰입니다. 접근제한자는 public, protected, private이 있습니다. public을 사용하면 부모클래스의 접근제한자 그대로, protected를 사용하면 부모클래스의 public을 protected로 바꾸고 나머지는 그대로, private은 전부 pr..

C++ 2020.10.27

C++ 에서의 캐스팅(형변환)

기존의 C언어에서는 2가지 캐스팅 방법이 있습니다. 하나는 그냥 컴파일러에서 알아서 캐스팅하는 암시적(implicit) 캐스팅, 다른 하나는 프로그래머가 직접 캐스팅하라고 지정하는 명시적(explicit) 캐스팅이 있습니다. 암시적 캐스팅의 경우 int와 double의 덧셈을 수행할 때, int형 변수가 자동으로 double 변수로 캐스팅 되는 것과 같은 것을 말하고, 명시적 캐스팅의 경우 void* 타입의 주소를 특정 구조체 포인터 타입의 주소로 바꾸는 것과 같은 것입니다. // 명시적 캐스팅 ptr = (Something *)other_ptr; int_variable = (int)float_variable; 이렇게 사용을 하는데, 몇가지 문제점이 있습니다. 먼저 위와 같은 타입 캐스팅의 경우 말도 안..

C++ 2020.10.27

연산자 오버로딩(전위/후위 증감 연산자)

연산자 오버로딩은 객체지향 프로그래밍의 특성인 다형성의 한 종류입니다. 연산자를 직접 사용자가 정의하는 것을 의미합니다. 그 중 증감 연산자에 대해 다뤄보겠습니다. operator++(); // ++x operator--(); // --x operator++(int x); // x++ operator--(int x); // x-- operator++(int); // x++ operator--(int); // x-- 위와 같이 쓰는데 인자 x는 아무 의미가 없습니다. 단순히 컴파일러 상에서 전위와 후위를 구별하기 위해 int 인자를 넣어주는 것입니다. 따라서 생략 가능합니다. 한가지 중요한 점은, 전위 증감 연산의 경우 값이 바뀐 자기 자신을 리턴해야 하고, 후위 증감 연산의 경우 값이 바뀌기 이전의 객체..

C++ 2020.10.27

malloc과 new의 차이

C++에서는 메모리 동적 할당을 위해 malloc과 new 둘 다 쓸 수 있습니다. 둘의 차이점에 대해 알아봤습니다. 1. malloc은 라이브러리 제공 함수로, stdlib.h 을 include 해주어야 사용 가능하지만, new는 기본으로 제공하는 키워드이므로 별도의 라이브러리 추가 없이 바로 사용 가능합니다. 2. malloc은 사이즈를 매개변수로 받고, 리턴타입이 void*형이므로 sizeof()와 캐스팅을 활용해야 쉬운 코딩이 가능합니다. 반면에 new는 할당할 타입을 지정하면 알아서 할당할 타입의 포인터로 넘어오기 때문에 할당할 타입과 같은 타입의 포인터 변수로 받아오기만 하면 됩니다. 3. malloc은 메모리를 동적으로 할당하는 것만이 목적이기때문에 초기값을 지정해줄 수 없지만, new는 할..

C++ 2020.10.24

스택, 힙, 코드, 데이터 영역

OS에서 프로세스가 바라보는 메모리 영역은 크게 코드(Code), 데이터(Data), 힙(Heap), 스택(stack) 영역으로 나눠집니다. Code 영역 프로세스가 실행할 코드와 매크로 상수가 기계어의 형태로 저장된 공간입니다. 컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only 로 지정되어있습니다. text 영역이라고도 합니다. Data 영역 코드에서 선언한 전역변수 또는 static 변수 등등이 저장된 공간입니다. 전역변수/static 값을 참조한 코드는 컴파일 하고 나면 Data 영역의 주소값을 가리키도록 바뀝니다. 실행 중도에 전역변수가 변경 될 수도 있으니 이 영역은 Read-Write로 지정되어있습니다. 단, 초기화 되지 않는 전역 변수는 BSS(Block Stated Sy..

C++ 2020.10.23