반응형


//******************************************************
// 상속 
//******************************************************
// --> 부모로 부터 물려 받는것 !! 
// --> 이미 구현되어있는 클래스로 부터 물려 받아서 새로운 기능을 확장 !! 
// --> extends --> 확장 !! 
// --> 재사용성의 개념을 가장 중요한 개념으로 여긴다 !! 	
//         폭스바겐 
// 					엔진 
//                     |
//    뉴비플 - 폴로 -골프 - 제타 - 파사트 - 티구안 
// 
// 일반화 : 모든 자동차에 적용될수 있는  기능들을 담고 있다. 
//******************************************************
// 상속 (구현상속) :  부모되는 클래스에 작성한 내용을 자식에서 그대로 물려 받는것 !! 
//  코드를 상속시켜주는것 을 의미한다 !! 
#include 
using namespace std; 


class  HumanBase // 사람의 기본적인 속성과 행동을 정의 한다.. 
{	
public : 
	int m_No; //식별 번호  
	int m_age;  // 나이 
	char m_name[20];  // 이름 !! 

public : 
	HumanBase(){} 
	~HumanBase(){} 
	
	void setNo(int no) {m_No = no; }
	void setAge(int age){m_age = age; }
		
	int getNo(){return m_No;}
	int getAge(){return m_age;}
	const char * getName(){return m_name;}
	// 추가적인 행동을 !! 
};
// 상속을 이용한 자식 클래스의 구현 !! 
				//상속지정자  부모 클래스 !! 
class Student : public HumanBase  
{
	public : 
	int m_No; //식별 번호  
	int m_age;  // 나이 
	char m_name[20];  // 이름 !! 

public : 
	HumanBase(){} 
	~HumanBase(){} 
	
	void setNo(int no) {m_No = no; }
	void setAge(int age){m_age = age; }
		
	int getNo(){return m_No;}
	int getAge(){return m_age;}
	const char * getName(){return m_name;}
private: 
	int m_grade ;//학년 
	char m_major[100]; //전공 
public : 
	void Study(){}  // 공부 
	void Circle(){} //동아리활동
}; 

class Teacher : public HumanBase
{
private: 
	int m_sal; //연봉 
public: 
	void Work(){} 
};


void main()
{
	Student s; 
	s.Study(); 
	// 행동도 물려받는다 !! 
	s.getAge(); 
	// 속성값도 물려받는다 !!
	s.m_age = 20; 
	
	Teacher t;
	t.getName(); 
	t.m_sal = 200; 
}


//************************************************* // 상속을 구현하는 상황에 대한 이해 !! //************************************************* // is - a 관계 !! // --> ex) 사람은 동물이다 !! ?? OK !! // --> ex) 스마트폰은 전화이다 !!?? OK !! // --> ex) 스마트폰은 게임기이다!!?? // 일반적으로 상속 --> is - a 관계가 성립하는 관계를 말한다 !! //************************************************* // has-a 관계 !! //************************************************* // ex) 스마트폰은 mp3를 갖고 있다 !! --> OK !! // ex) 자동차는 엔진을 갖고 있다 !! --> OK !! // 포함관계를 통해 구현하는 방법을 바람직하다 !! // 인터페이스 상속을 구현하는방법 !! // ex) 학교는 학생을 갖고 있다 !! // ex) 학교는 선생님을 갖고있다 !! // 상속은 --> is -a 관계일 경우에만 하자 !! // has - a 관계는 --> 포함관계, 인터페이스 상속


//**********************************************
// 상속상속 지정자와 상속의 은폐엄폐 
//**********************************************
// 95%이상은 public상속이다 !! 
// --> 부모의 특성을 그대로 물려 받겠다 !! 

// 상속 !! 
// --> is-a관계가 성립하는 public상속을 상속 !! 

#include  
using namespace std; 

class Base 
{
private:	  // 클래스 내에서만 사용이 가능 
	int a; 
protected : // 자기 클래스내와  자식클래스에서만 접근 !!    
	int b; 
public :
	int c; 

};
class BabyBase : private Base 
{	
public :									        // private  protected  public
	void foo()					   //public      접근 불가  protected  public
	{   cout <<  c << endl;     } // protected 접근 불가  protected  protected
};									   // private    접근 불가  private	    private
class  BabyBaby : public BabyBase 
{
	void goo(){  cout << c << endl;  }
		
};
void main()
{
	BabyBase bb;
	cout <<  bb.c << endl;
	
}





//*************************************************** // 상속과 객체의 생성과 소멸 //*************************************************** #include using namespace std; class Car { private: int m_No; public : Car(){ cout << "Car()" << endl; } Car(int no ){ m_No = no; cout << "Car(int no)" << endl; } ~Car(){ cout << "~Car()" << endl; } }; class Bus : public Car { private: int m_LineNo; public: Bus() { cout << "Bus()" << endl; } // 자식의 멤버는 자식의 생성자에서 부모의 멤버 부모의 생성자 !! Bus(int Carno , int LineNo) : Car( Carno) { cout << "Bus(int Carno , int LineNo)" << endl; m_LineNo = LineNo; } ~Bus(){ cout << "~Bus()" << endl; } }; void main() { Bus ns802( 1004, 801); }




'C, C++' 카테고리의 다른 글

[C++] 연산자 오버로딩  (0) 2014.11.18
[C++] 다형성  (0) 2014.11.18
[C++] this 이해  (0) 2014.11.18
[C++] 캡슐화  (0) 2014.11.18
[C++] static 키워드, 멤버 함수와 활용  (0) 2014.11.18

+ Recent posts