본문 바로가기

강의자료/Class

003. 클래스간의 상속 개념을 파악하자.

◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


다른 클래스의 특성을 가져와 좀 더 확장된 기능의 새로운 클래스를 만들 수 있는 상속에 대해서 이해한다.
#include 
#include 
using namespace std; 

class Mammal
{
public:
	Mammal():itsAge(2), itsWeight(5) {}
	~Mammal(){}

	int GetAge() const { return itsAge; }
	void SetAge(int age) { itsAge = age; }
	int GetWeight() const { return itsWeight; }
	void SetWeight(int weight) { itsWeight = weight; }

	void Speak()const { cout << "Mammal sound!\n"; }
	void Sleep()const { cout << "shhh. I'm sleeping.\n"; }

	// 부모가 자식에게 private에 대한 접근을 허용한다.
	int GetSpeed() const { return itsSpeed; }
	void SetSpeed(int speed) { itsSpeed = speed; }

protected:
	int itsAge;
	int itsWeight;

private:
	int itsSpeed;
};

enum BREED { GOLDEN, CAIRN, DANDIE};

class Dog : public Mammal
{
public:
	Dog():itsBreed(GOLDEN)
	{
		itsAge = 1;//protected이므로 가능.
		//itsSpeed = 10;//private은 자식도 접근 불가능.
		SetSpeed(10);// OK.
	}
	~Dog(){}

	BREED GetBreed() const { return itsBreed; }
	void SetBreed(BREED breed) { itsBreed = breed; }

	void WagTail() const { cout << "Tail wagging...\n"; }
	void BegForFood() const { cout << "Begging for food...\n"; }

private:
	BREED itsBreed;
};

void main()
{
	Dog fido;

	fido.Speak();
	fido.WagTail();

	cout << sizeof(Dog) << endl;

	// protected : 자식은 접근이 가능하고 외부에선 접근이 불가능하다.
	// 외부에서는 protected 와 private 의 차이가 전혀 없다.
	//fido.itsAge = 10;		// -> protected이므로 불가능.

	fido.SetAge(5);
	cout << "Fido is " << fido.GetAge() << " years old\n";

	// private : 자식과 외부 모두 접근이 불가능하다.
	//fido.itsSpeed = 50;	// -> private이므로 당연히 접근 불가능.
}