목차
- C++ 상속 (derived class, base class)
- 다단계 상속 (Multilevel Inheritance) - 부모 / 자식 / 손자
- 다중 상속 (Multiple Inheritance) - (부모1,부모2) / 자식
- protected 접근지정자 (protected Access Specifiers)
C++ 상속 (derived class, base class)
C++에서는 한 클래스에서 다른 클래스로 (속성・메소드) 상속 가능.
※ 상속 장점:
① 기존 코드 재사용 가능. ★
② 다형성 (= 상속한 메서드로 다른 작업 수행).
1.
자식클래스
= 다른 클래스를 상속하는 클래스.
= subclass (서브클래스 = 하위클래스)
= Derived Class (파생클래스)
부모클래스
= 다른 클래스에 의해 상속되는 클래스.
= superclass (수퍼클래스 = 상위클래스)
= Base Class (기본클래스)
2.
: (콜론) 기호 사용해 상속. (cf. Java 경우, extends 키워드 사용.)
(예)
class 자식 : 부모 {
...
}
[예제] ExHz (자식)클래스가 Hz (부모)클래스를 상속.
※ 상속해야만 ExHz 클래스에서 Hz 클래스의 site 속성 사용 가능.
※ 파일명: main.cpp
#include <iostream>
#include <string>
using namespace std;
class Hz { // 부모클래스
public:
string site = "홈짱닷컴";
void intro() {
cout << "코딩언어 그누보드 서버관리 강의 \n" ;
}
};
class ExHz: public Hz { // 자식클래스
public:
string host = "Homzzang.com";
};
int main() {
ExHz my;
my.intro();
cout << my.site + " " + my.host;
return 0;
}
결과값:
코딩언어 그누보드 서버관리 강의
홈짱닷컴 Homzzang.com
다단계 상속 (Multilevel Inheritance) - 부모 / 자식 / 손자
부모클래스를 상속한 자식클래스를 또 다시 상속 가능.
즉, 부모 > 자식 > 손자.
[예제]
※ 파일명: main.cpp
#include <iostream>
#include <string>
using namespace std;
class Hz { // 부모클래스
public:
void intro() {
cout << "홈페이지 제작관리 강의 \n" ;
}
};
class ExHz : public Hz { // 자식클래스
public:
string site = "홈짱닷컴";
};
class ExExHz : public ExHz { // 손자클래스
public:
string host = "Homzzang.com";
};
int main() {
ExExHz my;
my.intro();
cout << my.site + " " + my.host;
return 0;
}
결과값:
홈페이지 제작관리 강의
홈짱닷컴 Homzzang.com
다중 상속 (Multiple Inheritance) - (부모1,부모2) / 자식
1.
여러 부모클래스에서 동시 상속 가능.
즉, (부모1 + 부모2) > 자식
2.
쉼표 ( , ) 이용해 상속할 부모클래스 나열.
[예제]
※ 파일명: main.cpp
#include <iostream>
using namespace std;
class Hz1 { // 부모클래스1
public:
void intro() {
cout << "홈페이지 제작관리 강의\n" ;
}
};
class Hz2 { // 부모클래스2
public:
void site() {
cout << "홈짱닷컴 Homzzang.com\n" ;
}
};
class ExHz : public Hz1, public Hz2 {
};
int main() {
ExHz my;
my.intro();
my.site();
return 0;
}
결과값:
홈페이지 제작관리 강의
홈짱닷컴 Homzzang.com
protected 접근지정자 (protected Access Specifiers)
클래스 내부 및 상속된 클래스에서도 접근 가능.
[예제]
※ 파일명: main.cpp
#include <iostream>
using namespace std;
class Hz {
protected:
string site;
};
class ExHz : public Hz {
public:
string host;
void setSite(string s) {
site = s;
}
string getSite() {
return site;
}
};
int main() {
ExHz my;
my.setSite("홈짱닷컴");
my.host = "Homzzang.com";
cout << my.getSite() << " " << my.host;
return 0;
}
결과값: 홈짱닷컴 Homzzang.com
주의: 문자열은 큰따옴표로 묶음. (※ 작은따옴표 사용 시 에러 발생.)