일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- BOJ
- C++ library
- JUCE library
- C++
- OS
- JUCE
- gui
- LOB
- tour of go
- JUCE 튜토리얼
- vim-go
- 공룡책
- C++ gui 라이브러리
- go channel
- 코딩
- 자료구조
- C언어
- Nebula
- 리듬게임
- a tour of go
- C++ gui
- c++ heap
- 연결리스트
- 백준
- Docker
- 알고리즘
- go
- 운영체제
- JUCE라이브러리
- 프로그래밍
Archives
- Today
- Total
CafeM0ca
[C++] 클래스에서 default와 delete 본문
반응형
처default와 delete는 각각 switch case구문과 new의 짝궁으로 사용되었다.
C++은 오버로딩 기능이 있다보니 생성자를 여러개 만들 수 있다.
그 중에서도 default 생성자가 있는데
흔히 클래스이름() { } 처럼 생겼다.
디폴트 생성자임을 명시해주기 위해서 다음과 같이도 사용한다.
그리고 디폴트 생성자에 delete 키워드를 사용하면 클래스이름 변수이름; 처럼 사용이 불가능해진다.(디폴트 생성자가 호출되지 않기 때문)
\
main 함수의 a가 컴파일 에러를 보여주고 있다.
default와 delete는 디폴트 복사 생성자와 디폴트 대입 연산자에서도 사용 가능하다.
다음과 같은 코드가 있을 때,
실행결과
각각의 클래스 변수들의 주소는 제각각이지만 값들은 똑같다.
a1은 디폴트 대입 연산자로 a2의 num값이 대입되었고
a3은 디폴트 복사 생성자로 a1의 모든 멤버변수들로 초기화 되었다.
주석을 풀어주면 컴파일 에러가 발생한다.
이 밖에도
A 클래스에
void foo(int i); 라는 함수가 있다고 가정하자.
A a;
a.foo(1.23);
a.foo(1.23)은 double이 int로 타입캐스트되어 void foo(int i)에 매칭된다.
이를 컴파일단에서 방지하려면
void foo(double) = delete; 해주면 된다.
반응형
'Programming > C++' 카테고리의 다른 글
[C++] pimpl(pointer to implementation) (0) | 2018.06.30 |
---|---|
[C++] dangling pointer (0) | 2018.06.30 |
[C++] this 포인터 (0) | 2018.06.30 |
[C++] smart pointer (0) | 2018.06.27 |
[C++]std::initializer_list (0) | 2018.06.24 |
Comments