상속이란?
기존 정의되어 있는 객체의 속성과 메소드를 물려받아 새로운 클래스로 재정의하는 것 입니다.
현실에서 상속은 말그대로 부모로부터 자식이 물려받는 것을 말합니다.
이는 객체지향에서도 적용되며, 부모클래스의 속성과 메소드를 자식클래스가 물려받을 수 있습니다.
다형성이란?
상속받은 메소드를 재구현하여 같은 이름의 함수를 다양하게 호출할 수 있는 것 입니다.
부모 클래스의 메소드를 자식클래스에서 이름은 바꾸지않고 내용만 바꾸어 호출시키며 사용할 수 있습니다.
상속은 클래스 선언시에 " : (접근지정자) 부모클래스이름" 방식으로 작성해주면 됩니다.
사람클래스와 학생클래스를 상속으로 부모 자식관계로 만들어 main함수에서 호출시켜보겠습니다.
person클래스
#pragma once
#include <iostream>
using namespace std;
class person {
protected:
int age=0;
string name="unkown";
int height=0;
int weight=0;
public:
person(int Age, string Name, int Height, int Weight); //생성자
~person();
person() {};
void print() {
cout << "이름: " << name << "/나이: " << age << "/키: " << height << "/몸무게:"
<< weight << "\n";
}
};
person::person(int Age, string Name, int Height, int Weight)
{
this->age = Age;
this->name = Name;
this->height = Height;
this->weight = Weight;
}
person::~person() {
cout << "person객체 소멸" << "\n";
}
student클래스
#pragma once
#include "person.h" //person헤더파일을 포함시킴
class student : public person {
private:
int grade; //학년
public:
student(int Age, string Name, int Height, int Weight, int Grade); //생성자
~student();
void print() { //person클래스의 print()함수 재정의
cout << "이름: " << name << "/나이: " << age << "/키: " << height << "/몸무게:"
<< weight << "/학년: "<<grade << "\n";
}
};
student::student(int Age, string Name, int Height, int Weight, int Grade)
{
this->age = Age;
this->name = Name;
this->height = Height;
this->weight = Weight;
this->grade = Grade;
}
student::~student() {
cout << "student객체 소멸" << "\n";
}
코드를 보시면 student클래스의 속성이 grade만 추가되어있고 그 외에는 부모클래스로부터 속성값을 물려받아 사용하는 것을 보실 수 있습니다.
또한 print()함수를 재정의 하여 학생클래스에서는 학년까지 출력시키는 습니다.
student생성자를 저렇게 사용하려면 person에 기본생성자(디폴트생성자)가 필요합니다.
이제 Main함수를 통해 학생과 사람 클래스를 호출하여 print()함수와 소멸자를 호출시켜보겠습니다.
Main.cpp
#include "student.h"
int main() {
person per(20, "사람", 181, 74);
student stu(15, "학생", 170, 60, 2);
per.print();
stu.print();
}
생성자의 매개변수대로 값을 전달시켜주어 생성하고 각 print()메소드를 호출시킨 결과입니다.

print()로 값이 출력이 되고
소멸자 호출순서가 학생 다음으로 person이 나옵니다. 근데 person이 두번 소멸되었죠?
이는 C++에서 클래스의 소멸자는 객체가 소멸될 때 자동으로 호출되며, 클래스의 계층 구조에서 상위 클래스와 하위 클래스에 각각 소멸자가 정의되어 있을 때, 해당 객체가 소멸될 때 각각의 소멸자가 호출되는 특성을 나타냅니다.
이상입니다.
'C++ > 객체지향' 카테고리의 다른 글
[C++] 생성자와 소멸자 (0) | 2023.11.04 |
---|---|
[C++] 접근지정자 - (public/private/protected) (0) | 2023.10.27 |
[C++] 객체 - 객체지향 첫시작 (1) | 2023.10.23 |