생성자란?? Constructor란?
C++ 에서 클래스가 멤버를 초기화하는 방법을 사용자 지정하거나
클래스의 개체를 만들때 함수를 부르기 위해 만드든것이 생성자입니다.
즉, 생성자(Constructor)란 클래스 개체를 만들때 함수를 부르거나 클래스 안의 멤버들을 초기화 할때 사용하는 멤버함수입니다.
생성자의 기능
1. C++에서 생성자를 이용해 객체 혹은 개체를 생성할때 멤버 변수를 초기화 할 수 있습니다.
2. 생성자는 특정메서드로 클래스 이름과 동일한 이름으로 만들수 있습니다.
생성자의 특징
1. 생성자는 반환하는 값이 없습니다.
2. 생성자는 여러번 정의 될 수 있습니다.
생성자 종류
1. 기본 생성자
2. 복사 생성자
기본 생성자
매개 변수를 갖지 않거나 모두 기본값이 설정된 매개 변수를 가지고 있는 생성자를 기본 생성자라고 합니다.
복사 생성자
자신과 같은 클래스 타입의 다른 개체에 대한 참조를 인수로 전달받아, 그 참조를 가지고 자신을 초기화하는 생성자를 복사 생성자 라고 합니다.
(복사 생성자에 대한 포스팅은 나중 포스팅에서 알아보겠습니다.)
기본 생성자 사용법
1.C++에서 생성자를 구현하지 않으면 기본 생성자로 생성이 됩니다.
기본 생성자는 매개 변수를 가지지 않으며 멤버 변수는 0, NULL 등으로 초기화 됩니다.
2. 생성자를 만들때에는 클래스 명과 동일한 이름을 만들어주고 반환형은 없이 만들어 줍니다.
형식
클래스명(){ }
3. 생성자를 만들때 인자를 넣어서 만들수 있습니다.
형식
클래스명( int test, char test,....){ }
4. 생성자 명은 동일한 이름으로 만들 수 있습니다.
하지만 인자는 다르게 해주어야 만들 수 있습니다.
형식
클래스명( int test, char test,....){ }
형식
클래스명( int test, char test, int test2....){ }
기본 생성자 코드 1
생성자를 만들지 않고 개체를 만들어 보았습니다.
#include <iostream>
#include <string>
using namespace std;
class Test {
private:
string name;
int age;
public:
void test1() {
cout <<"이름 = "<< name << "\n나이 = " << age << " " << "\n";
}
};
int main(void) {
Test test = Test(); // 기본 생성자
test.test1();
return 0;
}
실행 결과
생성자를 만들지 않으면 개채를 생성할때 멤버 변수들이 초기화 되어 NULL 값과 0값으로 초기화 된걸 확인 할 수 있습니다.
name 에는 NULL로 초기화 되어 아무것도 없으며
age에는 0으로 초기화가 되었습니다.
생성자란?
기본 생성자2
생성자를 생성후 멤버변수로 값들의 초기화 하여 사용할 수 있습니다.
생성자를 만든후 test라는 개채를 만들었습니다.
#include <iostream>
#include <string>
using namespace std;
class Test {
private:
string name;
int age;
public:
Test()
{
name = "홍길동";
age = 20;
}
void test1() {
cout <<"이름 = "<< name << "\n나이 = " << age << " " << "\n";
}
};
int main(void) {
Test test = Test();
test.test1();
return 0;
}
실행 결과
생성자를 통해 생성된 test 에서 멤버변수들의 값이 초기화 되었습니다.
기본 생성자 3
인자가 들어가는 생성자를 만든후 개채를 생성할때 인자로 10을 넣어주었습니다.
#include <iostream>
#include <string>
using namespace std;
class Test {
private:
string name;
int age;
public:
Test() //기본 생성자
{
name = "홍길동";
age = 20;
}
Test(int a) // 인자가 있는 생성자
{
name = "홍길동";
age = 20 + a;
}
void test1() {
cout <<"이름 = "<< name << "\n나이 = " << age << " " << "\n";
}
};
int main(void) {
Test test = Test();
Test test2 = Test(10); // 생성자에 인자 10 전달
test.test1();
test2test1();
return 0;
}
샐행 결과
인자를 넣어준 생성자는 age에 10이 더하기 되어 값이 초기화 되었습니다.
기본 생성자 4
인자가 들어가는 생성자를 인자수를 다르게 하여 만든후 개채를 생성할때 인자로 10과 10을 넣어주었습니다.
#include <iostream>
#include <string>
using namespace std;
class Test {
private:
string name;
int age;
public:
Test() //기본 생성자
{
name = "홍길동";
age = 20;
}
Test(int a) // 인자가 있는 생성자
{
name = "홍길동";
age = 20 + a;
}
Test(int a, int b) // 인자가 있는 생성자
{
name = "홍길동";
age = 20 + a + b;
}
void test1() {
cout <<"이름 = "<< name << "\n나이 = " << age << " " << "\n";
}
};
int main(void) {
Test test = Test();
Test test2 = Test(10); // 생성자에 인자 10 전달
Test test3 = Test(10,10);
test.test1();
test2.test1();
test3.test1();
return 0;
}
실행 결과
인자를 두개 넣어준 생성자는 age에 10과 10이 더하기 되어 값이 초기화 되었습니다.
오늘의 포스팅 정리
오늘은 생성자가 무엇인지와 사용법에 대해서 알아보았습니다.
위의 생성자들은 사용법은 여러가지 방법이 있습니다.
오늘 생성자에 대해 이해를 돕기위해 간단하게 알아보았습니다.
다음 포스팅에서는 초기화리스트에 대해 알아보겠습니다.
'개발 > C++' 카테고리의 다른 글
[C++] 소멸자란? 생성자와 소멸자를 만들어보고 사용해보기~!! (0) | 2022.12.09 |
---|---|
[C++] 초기화 리스트? 생성자와 멤버 초기화리스트를 만들어보고 사용해보기~!! (0) | 2022.11.29 |
[C++] cout 출력(Output) 하기~! 나도 할 수 있다 개발!!!! (0) | 2022.10.28 |
[C++] 함수 포인터 란? 함수 포인터 만들고 사용하기 (function pointer) (0) | 2022.10.28 |
댓글