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("김아무개", 16, 202012121);
s1.printAll();
return 0;
}
|
line 5: 우선 부모인 Person클래스를 만들었습니다. 멤버 변수로 string객체 name과 int형 age를 가집니다.
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); 같은 형태가 될 수 없다는 것입니다.
다시 말해 부모 생성자로 자식의 멤버 변수(정확히는 자식이 이어받은 부모의 멤버 변수)를 초기화 가능하게 되었습니다.
'컴퓨터 > C, C++' 카테고리의 다른 글
[C++] STL vector erase사용법 정리 (0) | 2022.12.03 |
---|---|
[C, C++]배열 크기 늘리기, 배열 크기 두 배로 바꾸기 (0) | 2022.06.16 |
[C]c언어 배열과 문자열, 배열에 문자열 대입하기 (0) | 2022.05.07 |
[C] C언어의 포인터 및 배열 정리, 포인터와 배열의 관계 (0) | 2022.04.06 |
[C언어] CSV 컴마 < , >로 구별된 숫자를 출력하는 프로그램 (0) | 2021.12.08 |
댓글