: 기존에 존재하는 유사한 클래스로부터 속성과 동작을 이어받고 자신이 필요한 기능을 추가하는 기법
장점
class Car { // 수퍼클래스
int speed;
}
class SportsCar : public Car { // 서브클래스
bool turbo;
}
#include <iostream>
#include <string>
using namespace std;
class Car {
public:
// 3개의멤버변수선언
int speed; // 속도
int gear; // 주행거리
string color; // 색상
// 3개의멤버함수선언
void setGear(int newGear) { // 기어설정멤버함수
gear = newGear;
}
void speedUp(int increment) { // 속도증가멤버함수
speed += increment;
}
void speedDown(int decrement) { // 속도감소멤버함수
speed -= decrement;
}
};
// Car 클래스를상속받아서다음과같이SportsCar 클래스를작성하여보자.
class SportsCar : public Car { // Car를상속받는다.
// 1개의멤버변수를추가
bool turbo;
public:
// 1개의멤버함수를추가
void setTurbo(bool newValue) { // 터보모드설정멤버함수
turbo = newValue;
}
};
int main()
{
SportsCar c;
c.color = "Red"; // 부모클래스멤버변수접근
c.setGear(3); // 부모클래스멤버함수호출
c.speedUp(100); // 부모클래스멤버함수호출
c.speedDown(30); // 부모클래스멤버함수호출
c.setTurbo(true); // 자체멤버함수호출
return 0;
}
접근 지정자 | 현재 클래스 | 자식 클래스 | 외부 |
private | O | X | X |
protected | O | O | X |
public | O | O | O |
: 자식 클래스가 필요에 따라 상속된 멤버 함수를 다시 정의하는 것
#include <iostream>
#include <string>
using namespace std;
class Car {
public:
int getHP()
{
return 100; // 100마력반환
}
};
class SportsCar : public Car {
public:
int getHP()
{
return 300; // 300마력반환
}
};
int main()
{
SportsCar sc;
cout << "마력: " << sc.getHP() << endl;
return 0;
}
재정의의 조건
=> 부모 클래스의 멤버 함수와 동일한 시그니처를 가져와야 함 = 멤버 함수의 이름, 반환형, 매개 변수의 개수와 데이터 타입이 일치해야함
: 하나의 자식 클래스가 두 개 이상의 부모 클래스로부터 상속받는 것
class Pickup_Truck : public Car, public Truck
{
...// 추가된 멤버
...// 재정의된 멤버
}
*멤버 호출시 어떤 클래스의 멤버인지 모호하게 될 수도 있으므로 주의!*
[c++]생성자와 소멸자 (0) | 2021.01.20 |
---|---|
클래스의 기초 (0) | 2021.01.20 |
배열과 포인터 (0) | 2021.01.17 |