노력과 삽질 퇴적물

OOP: 상속(or 계승) 본문

프로그래밍note/언어. C&C++ 계열

OOP: 상속(or 계승)

알 수 없는 사용자 2011. 7. 25. 22:56
객체지향 프로그래밍(OOP) = 캡슐화 + 다형성 + 상속



부모클래스{부모_클래스멤버}

class parentClass
{
public:
...부모형질_가...;
private:
...부모형질_나...;
protected:
...부모형질_다...;
};
자식_클래스 : 엑세스_지정자 부모_클래스{ 자식_클래스멤버}

class childClass : 액세스_지정자 parentClass
{
public:
...신규형질_A...;
private:
...신규형질_B...;
protected:
...신규형질_C...;
};
↓↓↓

(상속처리. 여기선 public으로 예)

↓↓↓
//실제로 구동되는 형태
class childClass public parentClass
{
public:
...부모형질_가...; //기성멤버. 상속받은 멤버
...신규형질_A...;  //신규멤버.
private:
...부모형질_나...; //기성멤버. 상속받은 멤버
...신규형질_B...;  //신규멤버.
protected:
...다...; //기성멤버. 상속받은 멤버
...신규형질_C...;  //신규멤버.
};







액세스_지정자!

class parentClass
{
public:
...가...;
private:
...나...;
protected:
...다...;
}를 상속시,


public private protected
class childClass : public parentClass
{
//부모클래스에 준비된 멤버.
public:
...가...;
private:
...나...; 
protected:
...다...;
};
//public 상속후 변환X 
class childClass : private parentClass
{
//부모클래스에 준비된 멤버.
private:
            ...가...; //전 public
...나...; 
...다...; 
//전 protected
};


//private 상속후 모조리 private
class childClass : protected parentClass
{
private:
...나...; //전 private
protected:
...가...; //전 public
...다...; //전 protected
};


//protected 상속후 private빼고 protected







childClassName :: 자식클래스_멤버함수(...) : 부모클래스_멤버함수(...)
{
...;
}
같은 경우도 가능.







다중상속!


부모클래스1{부모_클래스멤버}

class parentClass1
{
public:
parentClass1(...);//생성자
...가...;
private:
...나...;
protected:
...다...;
};
부모클래스N{부모_클래스멤버}

class parentClassN
{
public:
parentClass2(...);//생성자
...타...;
private:
...파...;
protected:
...하...;
};

class childClass : 액세스_지정자 parentClass1, 액세스_지정자 parentClass2, ..., 액세스_지정자 parentClassN
{
public:
childClass(...) : parentClass1(...), parentClass2(...), ..., parentClassN(...) {...}
...A...;
private:
...B...;
protected:
...C...;
};






virtual 예약어를 이용한 계승.
=> 조상클래스를 상속받은 클래스가 후손클래스에 다중상속시, 동일한 멤버가 N개 만들어지지 않게 한다.
=> 즉, 머리가 1개인 닭끼리 교배하더라도 후손중 머리가 N개 달린 자손은 절대 없는것.

class parentClass
{
public:
parentClass(...);//생성자
...가...;
private:
...나...;
protected:
...다...;
};



class childClass1 : virtual 액세스_지정자 parentClass
{
     public:
          parentClass(...);//상속받은 생성자.
     ...
class childClass2 : virtual 액세스_지정자 parentClass
{
     public:
          parentClass(...);//상속받은 생성자.
     ...
↓↓↓
(상속처리)
↓↓↓
class grandchildClass : 액세스_지정자 childClass11, 액세스_지정자 childClass12
{
     public:
          parentClass(...);//상속받은 생성자. 멤버상속이 중첩되지 않는다.
     ...



자식클래스가 1개만 한정되는건 단일계승으로, JAVA와 C#이 대표적.


'프로그래밍note > 언어. C&C++ 계열' 카테고리의 다른 글

CPP: 함수관련 편리한(?) 예약어  (0) 2011.08.02
가상함수 & 추상클래스  (0) 2011.07.26
생성자 & 소멸자  (0) 2011.07.25
OOP: 다형성  (2) 2011.07.23
OOP: 캡슐화  (0) 2011.07.23