카테고리 없음

04 - 1 C++ 보충 2-4챕터

pp4037 2026. 4. 1. 19:53
챕터 4-1 : 상속과 다형성 몰아보기 
// 상속의 필요성
// 코드 재사용성 : 똑같은 멤버 변수와 똑같은 멤버 함수들을 가진 두 클래스가 있다면 해당 멤버 변수와 멤버 함수를 부모 클래스로 묶어버릴 수 있다
// 확장성 : 공통 부분은 부모 클래스에 두고, 자식 클래스만의 멤버 함수와 멤버 변수들을 가지면서 자식 클래스의 기능을 좀 더 확장 할 수 있음
// 유지보수에 유리함 : 공통 부분을 부모 클래스에 묶어두면, 부모 클래스 한 곳만 수정하면 많은 자식 클래스의 부분에도 자동으로 적용됨

// 생성자의 경우 부모 클래스의 생성자 -> 자식 클래스의 생성자 순으로 생성된다. 탑을 쌓아올리는데 아랫단부터 쌓아올리는 것
// 소멸자의 경우 자식 클래스의 소멸자 -> 부모 클래스의 소멸자 순으로 생성된다. 탑을 철거하는데 윗단부터 빼내는 것

class 자식클래스명 : public 부모클래스명
{
};

class Cat : public Animal
{
};

// 다형성
// 자료형은 부모 자료형으로 같으나, 실제 멤버 함수는 다른 멤버 함수가 호출되는 성질
// 이 다형성은 virtual 키워드를 통해 가능하며, virtual 키워드가 붙은 멤버 함수를 가상 함수라고 한다.
// // Animal.h

#pragma once

class Animal // Animal이라는 클래스
{
public: // 누구나 접근할 수 있는 접근지정자
	Animal(); // Animal이라는 생성자
	
	virtual ~Animal(); // Animal이라는 소멸자.

	//void MakeSound();
	virtual void MakeSound();
	// 자식 클래스마다 행동을 다르게 구현해야하는 멤버 함수 앞에 virtual 키워드를 붙여 줍니다.
	// 자식클래스야, 내가 너희들에게 이 멤버함수를 물려줄테니 안에 채워넣을건 너희들이 재정의해봐.
	// 이것을 다형성이라고 하고, 오버라이딩이라고도 한다.
	// 오버라이딩(virtual)은 일반 멤버 함수와 소멸자에만 붙일 수 있다.
	// 멤버 함수, 소멸자에 virtual 키워드가 붙는다.
//void Eat();
	virtual void Eat();
	// virtual 키워드가 붙은 멤버 함수를 "가상 함수"라고 합니다.

};
// Animal.h

#pragma once

class Animal
{
public:
	Animal();

	virtual ~Animal();

	virtual void MakeSound();

	//virtual void Eat();
	virtual void Eat() = 0;
	// 가상 함수의 맨 뒤에 '= 0'을 붙이면 순수 가상 함수가 됩니다.
	// 가상 함수 == 자식들 중 누가 호출하는지에 따라 다른 로직이 수행된다.
	// 클래스의 객체와 같이 큰 틀만 주어진 상태에서 그 안에 무엇을 집어넣을지 자식클래스가 결정지으며 그것을 가상 함수라고 한다.
	// 이 행동을 자식 클래스에서 정의하게끔 강제할 필요가 있을때 순수 가상 함수 문법을 사용한다.
	// 순수 가상 함수는 자식 클래스에서 구현하지 않으면 컴파일 에러가 난다.

};
// Animal.h

#pragma once

class Animal
{
public:
	Animal();

	virtual ~Animal();

	virtual void MakeSound();

	//virtual void Eat();
	virtual void Eat() = 0;
	// 가상 함수의 맨 뒤에 '= 0'을 붙이면 순수 가상 함수가 됩니다.
	// 가상 함수 == 자식들 중 누가 호출하는지에 따라 다른 로직이 수행된다.
	// 클래스의 객체와 같이 큰 틀만 주어진 상태에서 그 안에 무엇을 집어넣을지 자식클래스가 결정지으며 그것을 가상 함수라고 한다.
	// 이 행동을 자식 클래스에서 정의하게끔 강제할 필요가 있을때 순수 가상 함수 문법을 사용한다.
	// 순수 가상 함수는 자식 클래스에서 구현하지 않으면 컴파일 에러가 난다.

	// 추상 클래스
	// 순수 가상 함수를 1개 이상 보유하고 있는 클래스가 추상 클래스.
	// 추상 클래스는 객체를 만들 수 없다.
	// 추상 클래스는 클래스에 정의할 수 없는 함수가 있는 클래스다.
	// 보통 부모 클래스라 하면 추상 클래스로 정의되는 경우가 많다.
	// class Human : public Animal 이 되었을 때 Animal(동물)로 객체를 만드는 경우는 없다.
};

 

 

 

어려움

class IWalkable
	// 0 : 50 : 00
	// 순수가상함수, 인터페이스
{
public:
	virtual void Walk() = 0; 
	// virtual(비주얼) 키워드를 붙여서 이 IWalkable이라는 클래스의 자식 클래스가 다형성(오버라이드)을 할 수 있도록 가상함수로 정의한다.
	// 거기에 = 0을 붙여서 순수 가상함수로 만들어 이 함수의 정의는 자식 클래스에서만 정의되게끔 한다.

}

class Human : public IWalkable // Human이라는 클래스는 IWalkable 클래스의 자식 클래스다.
{


}