본문 바로가기
프로그래밍 언어/C++

[C++] 생성자 함수

by 까망 하르방 2024. 6. 3.
반응형

생성자 함수 (constructor)

• 클래스 이름과 동일한 이름의 멤버함수

• 반환(return) 타입을 명시할 수 없다.

• 객체 생성시 단 한번 호출된다. (초기화 역할)

• 오버로딩(overloading) 가능

• 디폴트 값 설정 가능

 

 

[예제] 오버로딩 형태

class A {
    …
public:
    A();
    A(int n) :
    A(int n, char c);
};

 

 

Q) 생성자 함수를 만들지 않는다면?

컴파일러에 의해  생성자 함수가 자동으로 만들어진다.

→ 기본 생성자 함수 (default constructor)

 

 

Q) 컴파일러가 자동으로 생성하지 않는 경우

다른 매개변수 생성자가 존재하면 기본 생성자를 만들지 않는다.

#include <iostream>

using namespace std;

class A {
    
    int no;
public:
     A(int n) {}
};
int main(void)
{
    A aa(5); // ok
    A bb; // error
}

 

생성자 역할

객체 멤버 변수는 초기화하지 않으면 쓰레기값으로 채워져 있다.

그렇기에 객체 생성하면서 동시에 초기화 시켜주는것이 안정성이 높다.

생성할 때, 변수값을 명시시켜주는 것이다.

#include <iostream>

class People
{
    int age;
    public:
        // 생성자 명시 X
};
int main()
{
    People p; // age 변수는 쓰레기값 
}

 

 

[예제] 객체 상속시 생성자

#include <iostream>
class People
{
    int age;
public:
    People(int age) : age(age) {}
};
class Developer : public People
{
    int career;
public:
    Developer(int age, int career)
        : People(age), career(career) {}
};
int main()
{
    
    People p(32);
    Developer d(32, 5);
}

 

📌 [C++] 상속 관계에서 생성자 호출순서와 명시적 호출이란?

📌 [C++] protected 생성자(Constructor)란?

반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C/C++] union 공용체  (2) 2024.10.27
[C/C++] Header Guard 활용  (2) 2024.07.24
[C++] constexpr 키워드  (2) 2024.04.01
[C++] explicit 키워드  (0) 2023.01.20
[C++] 네임스페이스(namespace) 활용  (0) 2022.08.09

댓글