클래스 상속의 의의 :
1.작성한 클래스를 재사용함으로써 많은 코드를 줄일 수 있다.
2. 클래스 간의 계층적 관계를 구성하기 용이하다.(객체 지향프로그래밍에서 다형성, OOP의 토대가 됨)
[example]
5년 전, 오리로스는 로봇의 모델명, 생산년월 이 두가지로 Robot 클래스를 작성했다.
그런데 다음과 아래와 같은 기능 추가로 클래스를 새로 작성할 필요가 생겼다.
-수출용 로봇 : 수명 표시 기능, 수출 국가 출력 기능
-내수용 로봇 : 품질보증기간, 생산공장 출력 기능
이런 경우에 기존에 작성되어 있던 부모 클래스인 Robot을 상속받고 수출용, 내수용 각각 필요한 정보만 추가해준다면 공통 사항인 Robot을 새로 작성할 필요 없이 내수용, 수출용 클래스를 작성할 수 있게 된다.
부모 클래스(parent class or base class) : Robot
자식 클래스(child class or derived class) : RobotEx, RobotIn
#include <iostream>
#include <string>
class Robot
{
public:
Robot(std::string model_, int yymm_){//Robot의 생성자
this->model = model_;
this->yymm = yymm_ ;
}
std::string model;
int yymm ;
protected:
};
class RobotEx:public Robot{
public:
RobotEx(std::string model_, int yymm_, int lifeSpan_, std::string exCountry_): Robot(model_, yymm_){//RobotEx의 생성자
this->lifeSpan = lifeSpan_;
this->exCountry = exCountry_;
}
void show(){
std::cout << "-*-*-*-ROBOT INFO-*-*-*-" << std::endl;
std::cout << "모델명 : " << this->model<< std::endl;
std::cout << "생산년월 : " << this->yymm << std::endl;
std::cout << "수명 : " << this->lifeSpan << std::endl;
std::cout << "수출국 : " << this->exCountry << std::endl;
}
private:
int lifeSpan;
std::string exCountry;
};
class RobotIn:public Robot{
public:
RobotIn(std::string model_, int yymm_, int warranty_, std::string factory_): Robot(model_, yymm_){//RobotEx의 생성자
this->warranty = warranty_;
this->factory = factory_;
}
void show(){
std::cout << "-*-*-*-ROBOT INFO-*-*-*-" << std::endl;
std::cout << "모델명 : " << this->model<< std::endl;
std::cout << "생산년월 : " << this->yymm << std::endl;
std::cout << "보증기간 : " << this->warranty << std::endl;
std::cout << "공장명 : " << this->factory << std::endl;
}
private:
int warranty;
std::string factory;
};
int main(){
RobotEx cuteBot1("optimus",3012,10,"Korea");
RobotIn cuteBot2("atlas",2512,10,"Ulsan");
cuteBot1.show();
cuteBot2.show();
return 0;
}
[RESULT]
-*-*-*-ROBOT INFO-*-*-*-
모델명 : optimus
생산년월 : 3012
수명 : 10
수출국 : Korea
-*-*-*-ROBOT INFO-*-*-*-
모델명 : atlas
생산년월 : 2512
보증기간 : 10
공장명 : Ulsan
[Further]
위 예제에서는 Public으로 Robot을 상속받았기 때문에 main 함수에서 부모 멤버에 대해 아래와 같은 접근이 가능하다.
int main(){
RobotEx cuteBot1("optimus",3012,10,"Korea");
RobotIn cuteBot2("atlas",2512,10,"Ulsan");
std::cout << "cuteBot1의 모델명: "<< cuteBot1.model << std::endl;
std::cout << "cuteBot2의 생산년월: "<< cuteBot2.yymm << std::endl;
return 0;
}
만약 자식 클래스만 해당 멤버들을 사용할 수 있게 하고 싶다면, 접근 지정자 protected: 아래에 모델명과 생산년월을 넣으면 된다.
Next 상속, 멤버 이니셜라이저
'코딩 > C++ - 핵심과 사용법만' 카테고리의 다른 글
[C++/핵심과 사용법만] 멤버 이니셜라이저(initializer) (0) | 2024.02.14 |
---|