본문 바로가기

Language/C++

상속 & 멤버이니셜라이저

멤버 이니셜라이저

Base class 의 초기화를 위해서 원하는 생성자 함수를 호출할수 있게 해주는 것이다. 이때
Base class에서는 생성자 함수 오버라이딩 함수가 반드시 존재 하여야한다.

#include <iostream>

using std::endl;
using std::cout;

class Person
{
    int age;
    char name[20];
public:
    int GetAge() const
    {
        return age;
    }
    const char* GetName() const
    {
        return name;
    }
    Person(int _age=1, char* _name="noname")
    {
        age = _age;
        strcpy(name, _name);
    }
};

class Student:public Person
{
    char major[20];//전공
public:
    Student(int a,char* _name,char* _major) : Person(a,_name)//멤버 이니셜라이저(a 와 _name을 받을수 있는
    {                                                        //생성자 함수를 호출한다.
        strcpy(major,_major);
    }
    const char* GetMajor() const
    {
        return major;
    }
    void ShowData() const
    {
        cout<<"이름 :"<<GetName()<<endl;
        cout<<"나이 :"<<GetAge()<<endl;
        cout<<"전공 :"<<GetMajor()<<endl;
    }
};

int main(void)
{
     Student kim(20,"kim","computer");
    kim.ShowData();

    return 0;
}
이 코드에서 Student(int a,char* _name,char* _major) : Person(a,_name) 부분이 멤버 이니셜라이저를 사용한 부분이다.
const 변수에 대해서 사용을 할때는 변수명(초기화 하고자하는 매개변수) 였지만 class 에서는 class name 을 사용한다.