캡슐화 : 관련 있는 모든 것들을 하나의 클래스에 묶어두는 행위 클래스의 기능이 중요한 것일 뿐, 내부의 구성이 중요한 것은 아니기 떄문
Explicit : 생성자를 호출할 때 대입 연산자를 이용하여 값을 대입하면 자동 형변한 진행 -> 오버로딩이 진행되는 묵시적 형변한이 진행됨 프로그래머가 의도하지 않는 묵시적인 동작은 전혀 좋은 행위가 아님 묵시적 형변환을 원치 않 을 경우 생성자, 소멸자 앞에 explicit 키워드 선언
객체 배열이란 : 객체 여러 개를 연속된 메모리 공간에 배역 형식으로 선언? -> 가능
Static : CObj Obj[3];
Dynamic : CObj* Obj = new CObj[3];
동적 배열의 경우 소멸자는 할당 해제가 일어날 때 호출
But! 위의 두 방식은 매개변수를 가지는 생성자의 호출이 일어나지 않음
-> CObj* Obj[3] = { new CObj(100), new CObj(200),... }
위와 같은 형식을 통해 매개변수를 가지는 생성자의 오버로딩이 가능해짐
상호 참조 : 여러 클래스에 대해 include 할 경우 상호 간의 헤더를 include 하게 되어 전처리기 단계에서
서로에 대한 참조가 계속하여 발생하게 되고, 이로 인해 무한 루프에 빠지게 되는 현상
전방 선언 : 상호 참조를 해결하기 위한 방식으로 헤더파일 -> class CPlayer; Cpp파일 -> #include "Player.h"
형식으로 선언하여 헤더에서는 해당 클래스의 존재만을 확인하고, 실제로 작업이 일어나는 Cpp파일에서 헤더 를 참조하므로써 상호 참조 방지
+ 멤버 변수로 객체를 선언할 경우 포인터로 선언 (객체의 크기와 상관 없이 포인터의 크기는 4Byte -> 크기로 인해 발생하는 문제 해결)
But! 해당 방식이 좋은 방식은 아니다 헤더 파일은 헤더 파일에 포함시키되, 삼호 참조가 발생하지않도록 고려하는것이 Best!
cosnt 함수 : 목적) 함수의 기능을 읽기 전용으로 사용하기 위함
선언부의 맨 뒤에 const 키워드를 붙이므로써 선언
특징
Static : 내부에서 접근이 가능한 Data 영역에 변수를 등록, Static 변수를 다시 호출할 때 초기화식은 건너뛰며, 기존에 선 언된 Static변수 호출
Static함수 : 클래스 내에서 선언된 Static 함수는 클래스의 멤버 변수가 아니다.
클래스명::Static함수명 형식으로 사용하며, 해당 클래스의 선언 없이 사용이 가능하다
해당 함수의 초기화를 진행할 경우, 클래스의 멤버도 아닐 뿐더러 선언 시기도 다르므로 클래스 외부에서 초 기화를 진행한다
Static함수는 Const함수처럼 클래스 내부의 멤버 변수를 가공 할 수 없는데, 이는 Static함수가 클래스의 멤버 가 아니기 때문에 발생하는 현상이다
Static함수를 외부의 것으로 판단하게 되어 Get, Set함수를 사용하여 해당 클래스의 멤버 변수에 대한 주소를 넘겨주면 가공을 할 수 있다
클래스 내의 Stateic 변수 : 같은 타입의 객체를 여러 개 만든 후 해당 클래스 내에 Static 변수가 존재한다면 생성된 객체들 은 클래스의 Static변수를 공용으로 사용한다
위의 특성을 이용하여 기능 만을 제공하는 기능성 클래스 생성 가능 -> 클래스를 선언하지 않고, 클래스명::Static함수명 형식으로 함수만 호출하여 사용