C++ 상속 기본개념 & 문법
상속은 코드의 재활용이 절대 아니다.
코드의 재활용이라고 생각하지말자.
상속을 제대로 사용하면 매우 우아한 코드를 짤 수 있지만,,, 이도저도아니게 사용한다면 오히려 독이 된다.
"Person 객체 <---- UnivStudent 객체"
UnivStudent는 Person객체를 상속한다.
#include <iostream>
using namespace std;
class Person {
private:
int age;
char name[50];
public:
Person(int myage, char * myname) : age(myage) {
strcpy(name, myname);
}
void WhatYourName() const {
cout << "My name is " << name << endl;
}
void HowOldAreYou() const {
cout << "I'm " << age << " years old" << endl;
}
};
class UnivStudent : public Person { //Person 클래스를 Public 상속함.
private:
char major[50];
public:
UnivStudent(char * myname, int myage, char* mymajor) :Person(myage, myname) { //생성자에서 부모의 인자도 모두 받음. 하지만 보다시피 이니셜라이져를 통하여 부모의 생성자를 호출하여 초기화를 진행함. 즉, 자식의 생성자 안에서 부모의 생성자를 호출하는 식으로 생성자를 구성함.
strcpy(major, mymajor);
}
void WhoAreYou() const {
WhatYourName(); //Person 클래스의 멤버함수
HowOldAreYou(); //Person 클래스의 멤버함수
cout << "My major is " << major << endl;
}
};
int main () {
UnivStudent a_student("Steve", 22, "Computer Engineering");
a_student.WhoAreYou();
return 0;
}
/*
Person UnivStudent
상위 클래스 하위 클래스
기초(Base) 클래스 유도(Derived) 클래스
슈퍼(super) 클래스 서브(Sub) 클래스
부모 클래스 자식 클래스
----> 모두 동일한 표현
*/
//부모의 private 멤버는 자식이 접근이 불가능함.
//부모의 Public에 선언된 생성자 or 함수로부터 접근해서 사용해야됨.