42seoul:: CPP 04

jahlee·2023년 8월 2일
0

개인 공부

목록 보기
19/23

Polymorphism

다형성 (Polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.

업캐스팅

파생 클래스의 객체를 기본 클래스의 포인터로 가리키는 것을 의미한다. 업캐스팅을 할때는 명시적 타입 변환이 필요 없다.


int main () {

	Base* A = new derived();// 업캐스팅
    Base* B = (Base*)new derived();// 명시적 타입 변환 필요 X
    
}

다운캐스팅

기본 클래스 포인터가 가리키는 객체를 파생 클래스의 포인터로 가리키는 것을 의미한다. 업캐스팅과 반대이다. 하지만 업캐스팅과는 다르게 명시적 타입변환이 필요 하다.

abstracted class

직접 클래스의 객체를 인스턴스화 할 수 없는 클래스이다. 내부적으로 정의가 되어있지 않은 추상적인 멤버 함수가 있기 때문에 파생 클래스에서 재정의를 해준 다음 사용해야 한다.

Interface

순수 추상함수들로만 구성된 abstracted class를 interface 라고도 불린다. 결론적으로는 파생클래스를 위한 뼈대 라고 생각하면된다.

싱글톤 패턴 클래스

ex03에서 floor 클래스를 구현할때 싱글톤 패턴으로 구현을 하였다. 단 하나의 객체만 생성되어져 있기 때문에 관리하기 좋다.

struct MateriaList {// 연결리스트로 주소를 계속 저장해준다.
	AMateria* materia;
	MateriaList* next;
};

class Floor {
	private:
		static Floor* _floor;
		MateriaList* _list;
		Floor(void);
	public:
		Floor(const Floor& obj);
		Floor& operator=(const Floor& obj);
		~Floor(void);

		static Floor* getFloor(void);
		void addToList(AMateria* obj);
};

/*
	객체 생성이 된적이 있다면 그때의 주소를 반환해준다.
    없다면 동적할당해서 생성.
*/
Floor* Floor::getFloor(void) {
	if (_floor) return (_floor);
	_floor = new Floor();
	return (_floor);
}

0개의 댓글