반응형
아래와 같이 디폴트 생성자의 정의를 분리할 수 있다.
#include <stdio.h>
#include <iostream>
using namespace std;
class TEST
{
public:
int value;
TEST(void);
void printValue()
{
cout << value << endl;
}
};
TEST::TEST(void) {
value = 1;
}
int main(void)
{
TEST test;
test.printValue();
return 0;
}
그리고 생성자에 { }로 선언하면 빈 생성자를 정의한다.
class TEST
{
public:
int value;
TEST(void) { }
void printValue()
{
cout << value << endl;
}
};
좀 더 문법적으로 표현하면 아래와 같이 선언한다.
TEST(void) = default; // { } 와 동일
그리고 delete 키워드를 쓰면 디폴트 생성자를 삭제할 수 있다.
TEST(void) = delete;
TEST test1; 은 삭제된 생성자를 참조하려고 하기 때문에 컴파일 에러가 발생한다.
#include <stdio.h>
#include <iostream>
using namespace std;
class TEST
{
public:
int value;
TEST(void) = delete;
TEST(int val1)
:value(val1)
{ }
void printValue()
{
cout << value << endl;
}
};
int main(void)
{
//TEST test1; // compile error
TEST test2 = TEST(1); // 생성자 초기화 리스트는 사용 가능
test2.printValue();
return 0;
}
반응형
'개발 > C, C++' 카테고리의 다른 글
C++ - virtual 키워드 (0) | 2021.08.14 |
---|---|
C++ - 복사 생성자를 이용한 객체의 깊은 복사 (Deep Copy using Copy Constructor) (0) | 2021.08.10 |
C++ - 상수형 메서드와 mutable, const_cast<> (0) | 2021.07.28 |
C++ - 생성자 초기화 리스트 (Constructor Member Initializer List) (0) | 2021.07.26 |
C 언어에서 날짜 구하기 (2) | 2021.07.24 |
댓글