반응형
생성자를 생성하면 객체를 생성함과 동시에 초기화할 수 있다.
#include <iostream>
using namespace std;
class SimpleClass
{
private:
int num;
public:
SimpleClass(int n) // 생성자 (constructor)
{
num = n;
}
int GetNum() const
{
return num;
}
};
int main()
{
SimpleClass *Simple = new Simple(23);
}
생성자의 특징은 다음과 같다.
- 클래스의 이름과 함수의 이름이 동일하다.
- 반환형이 선언되지 않으며, 실제로 반환하지 않는다.
main() 함수 안에서 동적할당 시 객체 생성과 동시에 생성자를 초기화하는 법을 보여준다.
생성자의 활용으로는
- 생성자도 함수의 일종이니 오버로딩이 가능하다.
- 생성자도 함수의 일종이니 매개변수에 '디폴트 값'을 설정할 수 있다.
#include <iostream>
using namespace std;
class SimpleClass
{
private:
int num1;
int num2;
public:
SimpleClass() // 생성자 (constructor)
{
num1 = 0;
num2 = 0;
}
SimpleClass(int n)
{
num1 = n;
num2 = 0;
}
SimpleClass(int n1, int n2)
{
num1 = n1;
num2 = n2;
}
void ShowData() const
{
cout << num1 << ' ' << num2 << endl;
}
};
int main()
{
SimpleClass sc1;
sc1.ShowData();
SimpleClass sc2(100);
sc2.ShowData();
SimpleClass sc3(100, 200);
sc3.ShowData();
}
이는 생성자의 오버로딩을 이용한 예시이다.
만약 객체를 동적으로 할당하려면 다음과 같이 사용해야 한다.
int main()
{
SimpleClass* sc1 = new SimpleClass();
sc1->ShowData();
SimpleClass* sc2 = new SimpleClass(100);
sc2->ShowData();
SimpleClass sc3(100, 200);
sc3.ShowData();
}
만약, 다음과 같이 객체를 선언하면 컴파일 오류가 발생한다.
SimpleClass sc1();
그 이유는 이러한 형태에 선언은 함수의 원형 선언이라고 볼 수 있다.
그렇기 때문에 () 를 빼 줘야 한다. 하지만 동적으로 할당 시 ()를 생략한 다음에 형태가 가능하다
SimpleClass* sc1 = new SimpleClass;
반응형
'c++ > 클래스의 완성' 카테고리의 다른 글
[C++] 객체 배열과 포인터 배열 (0) | 2023.01.02 |
---|---|
[C++] 멤버 이니셜라이져 (Member Initializer) (0) | 2023.01.01 |