노력과 삽질 퇴적물
OOP: 상속(or 계승) 본문
객체지향 프로그래밍(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...;
...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 |