디폴트 생성자
디폴트 생성자는 클래스가 선언되었을 때 자동으로 호출되어 클래스의 멤버를 구성해주는 함수이다.
디폴트 생성자의 경우에는 클래스를 선언할 때 매개변수에 특정값을 넣을 필요가 없으므로, 이 점에서 다른 생성자들과 차이점이 있다. (매개변수 없이 알아서 호출되는 함수이기 때문)
사실 말만 복잡한 것이다.
단순히 디폴트 생성자를 사용한다는 것은 생성자를 명시하지 않아도 좋다는 것이며, 선언 시점에 매개변수를 넘길 필요가 없다는 뜻이기도 하다.
class DefaultConstructor
{
public:
DefaultConstructor():str1("디폴트"), str2("생성자") {}
//또는 아래와 같이 선언
//DefaultConstructor() {
// str1 = 30;
// str2 = 40;
//}
string str1;
string str2 = "나는 무시됩니다.";
void printData()
{
cout << str1 << endl;
cout << str2 << endl;
}
};
카피 생성자
카피 생성자는 클래스 내 멤버를 외부에서 받는 값으로 초기화할 필요가 있을때 사용하는 생성자이다.
클래스 인스턴스 선언 시 생성자에 매개변수로 특정 값을 넘겨준다는 것이 디폴트 생성자와의 차이점이다.
// 전형적인 카피 생성자
class CopyConstructor
{
public:
CopyConstructor(int a, int b) {
copyInt1 = a;
copyInt2 = b;
}
int copyInt1;
int copyInt2;
void printData() {
cout << copyInt1 << endl;
cout << copyInt2 << endl;
}
};
// 참조자 멤버 초기화
class RefTest
{
private:
string *data;
public:
RefTest(string* data) : data(data) {}
void printData() {
cout << *data << endl;
}
};
인스턴스 만들어보기
위에 명시된 클래스들의 인스턴스를 만들기 위해 각각의 클래스를 main 함수에 호출해보자.
int main()
{
string data("refTest 문자열이지롱");
DefaultConstructor test;
CopyConstructor copyConstructor(9999, 10000);
RefTest refTest(&data);
test.printData();
refTest.printData();
copyConstructor.printData();
return 0;
}
'C, C++' 카테고리의 다른 글
C++) 정적 멤버 static (0) | 2024.01.24 |
---|---|
C++) 생성자 다중 정의 및 생성자 위임 (0) | 2024.01.23 |
C++) 디폴트 생성자(Constructor)와 소멸자 (0) | 2024.01.21 |
C++) 클래스 기본 문법 (0) | 2024.01.21 |
C++) C++ 스타일 C코드와 this 포인터의 정의 (0) | 2024.01.20 |