본문 바로가기
C++/클래스

[C++ 클래스의 이해] 2. 생성자란 무엇인가

by bigpicture 2022. 8. 19.
반응형

생성자는 클래스에서 객체를 생성할 때 초기화를 편하게 해주는 함수입니다. 생성자를 이용하면 객체 생성과 초기화를 동시에 할 수 있습니다. 

객체 생성 시 맴버변수들은 private 으로 분류하는 것이 일반적입니다. private 맴버들은 외부에서 접근하는 것이 불가능하기 때문에 값을 초기화 해주는 함수를 정의해야 했습니다. 상황을 이해하기 위해 예시를 하나 가져옵시다. 아래는 지난시간에 사용한 예시입니다. 이해를 돕는데 불필요한 코드는 생략했습니다. 주석 표시 부분을 보시면 됩니다. 

class tp
{
private:
    char company[20];
    char prod_name[20];
    float volume;
public:
    void SetValue(const char * cp,const char* pr_n,const float vol); //값 초기화 함수
};

void tp::SetValue(const char * cp,const char* pr_n,const float vol) //값 초기화 함수 내용
{
    strcpy(company,cp);
    strcpy(prod_name,pr_n);
    volume=vol;
}

int main()
{
    tp pure2080; //객체 생성
    pure2080.SetValue("LG","pure2080",150); //객체 값 초기화

    return 0;
}


값을 초기화하기 위해 SetValue 라는 함수를 클래스 안에 정의했습니다. 객체 생성후 함수를 호출하여 값을 초기화합니다. 

생성자를 이용하면 위 코드를 아래와 같이 바꿀 수 있습니다. 주석 표시 부분을 보세요. 

class tp
{
private:
    char company[20];
    char prod_name[20];
    float volume;
public:
    tp(const char * cp,const char* pr_n,const float vol); //생성자 선언
};

tp::tp(const char * cp,const char* pr_n,const float vol) //생성자 내용
{
    strcpy(company,cp);
    strcpy(prod_name,pr_n);
    volume=vol;
}


int main()
{
    tp pure2080("LG","pure2080",150); //객체 생성과 동시에 초기화

    return 0;
}


객체 생성부분을 보면 객체 생성과 동시에 초기화한 것을 알 수 있습니다. 초기화 방식은 코드를 보면 쉽게 알 수 있을 것입니다. 

생성자 선언 부분만 보면 아래와 같습니다. 

tp::tp(const char * cp,const char* pr_n,const float vol) //생성자 내용
{
    strcpy(company,cp);
    strcpy(prod_name,pr_n);
    volume=vol;
}


위 선언을 통해 알 수 있는 생성자의 특징은 아래와 같습니다. 

- 클래스 이름과 동일
- 반환형 선언이 없음

 

#전체코드

#include <iostream>
#include <cstring> //strcpy 사용

using namespace std;

class tp
{
private:
    char company[20];
    char prod_name[20];
    float volume;
public:
    tp(const char * cp,const char* pr_n,const float vol); //생성자 선언
};

tp::tp(const char * cp,const char* pr_n,const float vol) //생성자 내용
{
    strcpy(company,cp);
    strcpy(prod_name,pr_n);
    volume=vol;
}


int main()
{
    tp pure2080("LG","pure2080",150); //객체 생성과 동시에 초기화

    return 0;
}
반응형

댓글