반응형
생성자 함수 (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/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 |
댓글