생성자 예제
class Vector
{
public:
// 매개변수 없는 생성자
Vector()
{
mX = 0;
mY = 0;
}
private:
int mX;
int mY;
};
→ 자바에서는 private 접근 제어자의 변수들을 먼저 보여준다
- 헤더 파일과 소스 코드 파일이 분리되어 있지 않다.
- 라이브러리를 사용하는 사람들에게는 private 함수는 접근할 수 없기 때문에 아무 의미가 없다.
- 소스 코드 파일을 볼 수는 없지만, 헤더 파일을 통해 함수의 호출 가능 여부를 확인할 수 있다.
→ C++에서는 public을 먼저 보여준다.
- 라이브러리를 사용하는 사람들은 어떤 변수를 사용할 수 있는지 확인한 뒤 함수를 만드는 것이 더 편리할 수 있다.
- 소스코드를 볼 수 없더라도 헤더파일을 보고 어떤 함수를 호출할 수 있는지 판단한다.
초기화 리스트 (Initializer List)
class Vector
{
public:
Vector()
{
mX = 0;
mY = 0;
}
private:
int mX;
int mY;
};
→ 이는 대입일뿐 초기화가 아니다.
class Vector
{
public:
Vector()
: mX(0),
mY(0)
{
}
private:
int mX;
int mY;
};
→ 생성자 옆에 :
는 초기화 리스트를 시작하겠다는 의미.
- 두 번째부터는
,
를 찍는 이유는 넘겨주는 자료형이 리스트이기 때문이다. - 초기화 리스트를 사용해야 하는 이유:
- 대입 → 초기화가 된 이후 대입이 실행된다.
- 오브젝트가 만들어질 때 초기화가 된다.
- 상수 또는 참조 변수도 초기화할 수 있다.
- 대입으로 초기화할 수 없다.
class X
{
const int mNameSize;
AnotherClass& mAnother;
public:
X(AnotherClass& another)
: mNameSize(20),
mAnother(another)
{
/* 아래는 에러 */
// mNameSize = 20; // 상수값에 대입을 하려고 할 때 에러
// mAnother = another; // 참조 값에 대입을 하려고 할 때 에러
}
};
더 나은 Vector Class 생성하기
// vector.h
class Vector // Class 정의
{
public:
Vector();
Vector(int x, int y);
private:
int mX;
int mY;
};
// vector.cpp
Vector::Vector() // Class 구현
: mX(0),
mY(0)
{
}
Vector::Vector(int x, int y)
: mX(x),
mY(y)
{
}
기본 생성자
- 매개변수를 받지 않는 생성자
- 클래스에 생성자가 없으면 컴파일러가 기본 생성자를 자동으로 만들어준다.
- 기본 생성자의 특징:
- 멤버 변수를 초기화하지 않는다.
- 모든 포함된 개체의 생성자를 호출한다.
예시
// Vector.h
class Vector
{
private:
int mX;
int mY;
};
→ Vector 클래스에 생성자가 없는 경우
// Vector.obj
class Vector
{
public:
Vector() {}
private:
int mX;
int mY;
};
→ 컴파일러가 기본 생성자를 만들어 준다.
- 만약 생성자가 존재한다면, 컴파일러는 기본 생성자가 생성되지 않는다.
생성자 오버로딩
- Class에 여러 개의 생성자를 오버로딩하여 만들 수 있다.
- 기본 생성자
Vector() : mX(0), mY(0) {}
vector a; // 기본 생성자 호출.
- 매개변수를 가지는 생성자
Vector(int x, int y)
: mX(x)
, mY(y)
{
}
Vector a(1, 3); // 매개변수 목록이 일치하는 생성자 호출
'Language > C++' 카테고리의 다른 글
[C++] 11.Unmanaged Programming: Const flag (0) | 2024.01.25 |
---|---|
[C++] 10.Unmanaged Programming: 소멸자(Destructor) (0) | 2024.01.23 |
[C++] 8.Unmanaged Programming: Instance 생성 (0) | 2024.01.23 |
[C++] 7.Unmanaged Programming: Class (0) | 2024.01.23 |
[C++] 6.Unmanaged Programming: 파일 입출력 (1) | 2024.01.23 |