- 다수의 클래스를 정의할 때, 공통되는 특성들만을 모아놓은 하나의 클래스를 설계하고, 그 그 클래스에 대한 "IS-A" 또는 "HAS-A" 관계를 밝혀서 나머지 클래스를 구현할 때, 상속을 통해 구현할 지, 멤버로 포함시켜 구현할지를 정한다. - 아래 4가지의 관계를 구현하기 위해 public Inheritance(public 상속)을 이용할 수는 있지만, 프로그래밍 문제가 발생할 여지가 있으므로, 가급적 public 상속은 "IS-A" 관계를 구현하는 수단으로만 사용하자. IS-A Relationship (IS-A 관계) - "IS-A"는 "~는 a이다."라는 표현으로, "주어에 A가 포함된다."를 의미한다. - "IS-A" 관계가..
Class Inheritance 클래스 상속 - OOP의 지향점 중 하나인 코드의 재활용*을 구현하는 방법이다. - 상속 기능을 통해 Base Class(기초 클래스)로부터 모든 데이터 멤버와 멤버 함수들을 넘겨받은 Derived Class(파생 클래스)를 만들 수 있다. - Derived Class에서는 Base Class에서 넘겨받은 멤버에 데이터 및 기능을 추가할 수 있다. - 파생 클래스의 객체를 생성하게 되면, 프로그램은 그에 해당하는 기초 클래스 객체를 먼저 생성한 다음, 추가적인 데이터를 덧붙이는 방식으로 파생 클래스 객체를 만든다. (기초 클래스 Constructor -> 파생 클래스 Constructor) - 생성 순서와 정반대로, 객체의 파괴는 파생 클래스의 객체부터 먼저 파괴되며, 그..
static Class Member Function static 클래스 멤버 함수 - static 타입으로 정의한 클래스 멤버 함수를 의미한다. - 함수 원형과 정의를 분리하였을 경우, static 키워드는 함수 원형 부분에 선언해야 한다. - static 멤버 함수는 어떤 객체에도 결합되지 않으므로, 객체에 의해 호출되지 않는다. - static 멤버 함수는 static 데이터 멤버만 사용할 수 있다. - static 멤버 함수는 this 포인터를 갖지 않는다. - \(\texttt{static}..
NULL Pointer 널 포인터 C++11 이전 버전 - 0은 숫자 값(Zero)과 널 포인터 두 가지 의미로 혼재되어 있었다. - 이 때문에 많은 Reader 와 컴파일러가 두 의미를 구분짓는 데 어려움을 겪었다. - 이 두 가지 의미를 구분하기 위해, 널 포인터를 (void*) 0 으로 표현하기도 했다. - C 매크로를 통해 정의된 NULL 을 사용하기도 했다. (NULL 은 다수의 헤더파일에서 0으로 정의되어 있는 기호상수이다.) C++11 이후 버전 - C++11부터는 새로운 키워드 nullptr 을 통해 널 포인터를 표현할 수 있게 되었다. - 기존에 사용했던, 0을 비롯한 다양한 표현들을 아직도 사용가능하지만, nullptr 을 사용할 것이 권장된다. Exampel. nullptr Usage..
Copy Constructor 복사 생성자 - 한 객체를 다른 객체로 복사할 때 자동으로 실행되는 생성자이다. - 일반적인 대입에 사용되는 것이 아닌, 값 전달에 의한(함수 매개변수 전달을 포함한) 초기화 작업에 사용되는 생성자이다. - 디폴트 복사 생성자는 static 멤버를 제외한 전 멤버들을 각각 복사 및 대입한다 (이러한 복사 작업을 Shallow Copying; 얕은 복사 또는, Memberwise Copying라 한다.) - 새로운 객체가 생성될 때마다 static 데이터 멤버의 값이 변하는 구조의 클래스에서는, 의도에 맞게 static 데이터 멤버를 수정하는 작업을 복사 생성자에도 구현해놓아야 한다. (디폴트 복사 생성자는..
Special Member Function 특별 멤버 함수 - 클래스 객체 사용 시에 필수적이지만, 사용자가 정의하지 않은 경우 C++이 자동으로 정의하는 멤버 함수를 총칭하는 용어이다. - 아래 메서드들은 조건에 부합하는 경우에 C++ 컴파일러가 자동으로 정의하는 메서드들이다. Default Constructor ; 생성자가 전혀 정의되어 있지 않은 경우 Default Destructor ; 파괴자가 전혀 정의되어 있지 않은 경우 - 컴파일러가 만든 디폴트 파괴자 정의 내부는 비어있다. Copy Constructor ; 복사 생성자가 전혀 정의되어 있지 않은 경우 Assignment Operator ; 대입 연산자를 따로 정의(오버로딩)하지 않은 경우 Address Operator ; 주소 연산자를 정..
Conversion Function 변환 함수 - C++ 연산자 함수의 특별한 형태이다. - 사용자 정의 강제 데이터형 변환 기능을 구현하는 수단이다. - dataType variables = objectName;과 같은 구문을 가능하게 만든다. Conversion Function Definition (변환 함수 정의) // Ex. 변환 함수 원형의 일반형 operator typeName(); - typeName형으로의 형변환을 구현하기 위해서는, 위와 같은 연산자 함수가 구현되어야 한다. - 변환 함수는 해당 클래스의 멤버 함수이어야 한다. - 변환 함수는 리턴형을 가지지 않는다. (함수명 typeName으로 어떤 데이터형으로 변환(..
Random Number Generation 난수 생성 - C++에서는 rand(), srand(), time() 라이브러리로 난수를 발생시키는 프로그램을 작성할 수 있다. - C++11부터는 헤더파일을 통해 확장된 난수 제어 기능을 제공한다. rand() Function (rand() 함수) - Prototype : int rand (void); - C++의 헤더파일에 정의되어 있다. - 0 ~ 32767 사이의 정수 중 하나의 수를 리턴한다. (32767(0x7FFF)은 헤더파일 내에 기호상수로 RAND_MAX라 ..