수업기록

PREVIOUS RECORD

객체 지향 프로그래밍의 특징 객체 : 현실에 존재하는 대상을 프로그래밍 언어로 표현해놓은 상태. 객체 = 인스턴스(실제 메모리에 할당된 상태) + 클래스(사용자 정의 자료형) 객체 생성 : 클래스 타입의 대상을 메모리에 할당하는 행위 추상화 : (OOP의 특성 중 제일 우선되는 특징) 실제 사물이 가진 것 중 공통적인 요소만 뽑아내는 것. =데이터와 기능으로 추출해내가는 것. 클래스 : 데이터(변수,상수)와 기능(함수)의 집합체 C++의 구조체는 데이터와 기능이 집합되기 때문에, 클래스와 같이 객체로 가능


PRESENT RECORD

클래스

클래스의 속성

  1. 은닉화 : 데이터의 보호
  2. 캡슐화 : 캡슐로 감싸서 내용을 보호하지만, 그 대표적인 이름으로 공통화 시키는 것
  3. 상속성 : 부모 클래스가 가진 특성/특징을 자식 클래스에게 넘겨주는 것
  4. 다형성 : 부모 또한 자식의 속성을 가질 ‘수도’ 있도록 여러 형태를 취하는 것.
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;
}

객체의 생성과 소멸 (생성자 소멸자)

클래스 또한 구조체의 메모리 할당 방식과 같다. : : 메모리 블럭 형태 : : (결국 작은 것부터 멤버 변수를 적어주는 것이 좋다)

객체의 생성 과정

  1. 메모리 할당
  2. 생성자 호출(디폴트로 나타나는 함수)

객체의 소멸 과정

  1. 소멸자 호출
  2. 메모리 반환

클래스는 자동으로 생성하는 함수가 4개나 존재한다.

  1. 디폴트 생성자 : 어떤 형태의 생성자건 하나라도 구현되어 있으면 호출이 불가하다.
  2. 디폴트 대입 연산자
  3. 디폴트 복사 생성자
  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) 위와 같은 상황이 벌어지지 않도록 앞에 붙이는 키워드.


숙제 25-03-13 성적표 class 25-03-14 TXTRPG CLASS