본문 바로가기
컴퓨터/C, C++

[C++] C++에서 클래스 생성자 재사용(상속, 부모 생성자, 자식 생성자)

by 도도새 도 2022. 6. 6.

C++ 생성자 재사용

 

 C++에서 생성자를 재사용 하는 방법을 정리합니다. 

 C++에서 생성자는 멤버 변수를 초기화시켜주는 역할을 합니다. 만약 생성자를 작성하는 경우에는 기본 생성자가 호출되지 않기 때문에 기본 생성자를 호출해야만 합니다.

 그런데 만약, 부모 클래스에서 생성한 멤버 변수를, 그리고 그 생성자를 자식 클래스에서 그대로 사용하려면 어떻게 해야 할까요?

이 의문은 상속을 공부하다보면 당연히 들 수밖에 없습니다.

 

왜냐하면 부모를 상속받은 자식 요소는 (접근 가능한지 아닌지 차이일 뿐)부모 요소를 그대로 물려받아 사용할 수 있기 떄문입니다. 

 즉, 부모 Person 클래스의 생성자를 자식 클래스 Student클래스에서 그대로 사용할 수 있을까요? 결론부터 말하자면 가능합니다. 간단히 정리하겠습니다.

 

부모 생성자 재사용 코드

 

생성자 재사용 코드:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <string>
using namespace std;
 
class Person {
public:
    Person();
    Person(string name, int age) :name(name), age(age) {};
protected:
    string name;
    int age;
};
 
class Student:public Person{
public:
    Student();
    Student(string name, int age, int _sid):Person(name, age) {
        sid = _sid;
    };
private:
    int sid;
 
public:
    void printAll() {
        cout << name <<endl
        cout << age << endl
        cout << sid << endl;
    }
};
int main(void) {
    Student s1("김아무개"16202012121);
    s1.printAll();
    return 0;
}

line 5: 우선 부모인 Person클래스를 만들었습니다. 멤버 변수로 string객체 nameintage를 가집니다.

line 8: Person(string name, int age) :name(name), age(age) {}를 통해서 멤버 변수를 초기화해줍니다. 사용자로부터 name이라는 변수를 받아 name에 저장, age라는 변수를 받아 age에 저장합니다.

line 14: class Student:public Person: Person을 상속하는 클래스 Student를 만듭니다.

line 17: Student(string name, int age, int _sid):Person(name, age) {

sid = _sid;

};

: 부모 생성자를 재사용합니다.

생성자를 초기화 할 때 :Person(name, age)의 형태로 부모 생성자를 재사용합니다.

코드를 보면 Student에 추가된 멤버 변수는 sid밖에 없습니다.

그러나 31번쨰 줄, Student의 객체를 생성하려고 하면 부모 생성자의 요소들 역시 사용해야 하게 됩니다.

, Student s1(16); 같은 형태가 될 수 없다는 것입니다.

 

다시 말해 부모 생성자로 자식의 멤버 변수(정확히는 자식이 이어받은 부모의 멤버 변수)를 초기화 가능하게 되었습니다.

댓글