c++/클래스의 완성

[C++] 생성자 (Constructor)

TIM_0529 2023. 1. 1. 05:14
반응형

생성자를 생성하면 객체를 생성함과 동시에 초기화할 수 있다.

 

#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;

 

반응형