PREVIOUS RECORD
객체 지향 프로그래밍의 특징 객체 : 현실에 존재하는 대상을 프로그래밍 언어로 표현해놓은 상태. 객체 = 인스턴스(실제 메모리에 할당된 상태) + 클래스(사용자 정의 자료형) 객체 생성 : 클래스 타입의 대상을 메모리에 할당하는 행위 추상화 : (OOP의 특성 중 제일 우선되는 특징) 실제 사물이 가진 것 중 공통적인 요소만 뽑아내는 것. =데이터와 기능으로 추출해내가는 것. 클래스 : 데이터(변수,상수)와 기능(함수)의 집합체 C++의 구조체는 데이터와 기능이 집합되기 때문에, 클래스와 같이 객체로 가능
PRESENT RECORD
클래스의 속성
- 은닉화 : 데이터의 보호
- 캡슐화 : 캡슐로 감싸서 내용을 보호하지만, 그 대표적인 이름으로 공통화 시키는 것
- 상속성 : 부모 클래스가 가진 특성/특징을 자식 클래스에게 넘겨주는 것
- 다형성 : 부모 또한 자식의 속성을 가질 ‘수도’ 있도록 여러 형태를 취하는 것.
class CObj{
int m_iX; //헝가리안 표기법
int m_iY;
}
CObj instance = {100,200}; //불가 :
선언과 동시에 초기화가 되지 않음 (생성자 때문인 듯)
접근제어 지시자의 등장
class CObj{
(private :)// 내부 접근 (중괄호 기준)
int m_iX;
public : // 내/외부 접근
int m_iY;
protected: //상속 접근
int m_iZ;
}
c++ 구조체의 경우, public이 기본 (C언어 해당 사항 아님) ! 멤버 변수는 public으로 쓰지 말자
get / set 함수
class CObj{
private :
void Render();
void setIX();
public :
int m_iX;
}
void CObj::Render(){
return m_iX;
}
void Cobj::setIX(int _i){
m_iX = _i;
}
객체의 생성과 소멸 (생성자 소멸자)
클래스 또한 구조체의 메모리 할당 방식과 같다. : : 메모리 블럭 형태 : : (결국 작은 것부터 멤버 변수를 적어주는 것이 좋다)
객체의 생성 과정
- 메모리 할당
- 생성자 호출(디폴트로 나타나는 함수)
객체의 소멸 과정
- 소멸자 호출
- 메모리 반환
클래스는 자동으로 생성하는 함수가 4개나 존재한다.
- 디폴트 생성자 : 어떤 형태의 생성자건 하나라도 구현되어 있으면 호출이 불가하다.
- 디폴트 대입 연산자
- 디폴트 복사 생성자
- 디폴트 소멸자 : 생성자와 달리 오버로딩이 불가함.
위 4가지는 우리가 직접 만들어주면 컴파일러는 이 함수들을 구현하지 않는다.
동적할당 시에 new가 생성자를 호출함(new만, malloc은 아님) 마찬가지로 delete가 소멸자를 호출함(delete만, free는 아님)
생성자의 초기화
class CObj{
public :
CObj() {
}
private :
int m_iC = 0; //이렇게 초기화가 가능하지만 권장되지 않음
}
CObj::CObj() : m_iC(10){} //멤버 변수의 초기화
CObj::CObj(int _i){
m_iC = _i; //*)이것 또한 멤버변수의 초기화라고 하기도 함
}
객체 생성의 단계는 1. 메모리 할당 2. 생성자 호출이 지나야 함. 그렇기에 메모리가 할당되고 나서, 생성자가 끝나기 전에 대입하는 것도 멤버 변수 초기화라고 간주하기도 함.
그러나!
const int 와 같이 상수의 경우 2번째 방식으로 진행하게 되면 문제가 생기게 됨.
int a;
a=9;
와 같은 형태라고 보이기 때문.
용어 정리
CObj obj[5]; //객체 배열
CObj* obj = new CObj[5]; //객체 배열 포인터
CObj* pArray[5]; // 객체 포인터 배열
CObj* pArray[5]={new CObj,new CObj,new CObj,new CObj,new CObj}; //가능
디폴트 대입 연산자
CPlayer player =400; ==> 이러면 생성자의 매개 변수로 들어감.
묵시적 형변환(implicit) → 똑똑이 컴파일러가 알아서 형변환 해줌
explicit CPlayer(int _i){ m_i = _i; };
명시적 형변환(explicit) → 위와 같은 상황이 벌어지지 않도록 앞에 붙이는 키워드.