일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Overloading
- UNO
- Binary
- Barcode
- Contour
- SERIAL
- flutter
- stream
- inheritance
- Encapusulation
- java
- sensor
- Android
- file access
- Pointer
- public
- parameter
- memory
- Class
- APP
- length
- preprocessing
- atmega328
- wpf
- aduino
- Read
- compare
- Unity
- mfc
- digitalRead
- Today
- Total
폴크(FOLC)
C++ 기본/복사 생성자 본문
# 기본 생성자 ( default constructor )
> 초기값을 설정하는 매개변수가 없다.
> 매개변수가 없는 상태에서 0 또는 NULL, 그리고 _T("") 등으로 초기값 설정
> 객체 생성시 초기값을 명시하지 않으면 컴파일러가 자동적으로 초기값 설정
# 특징
> 생성자가 정의되어 있지 않은 경우에만 컴파일러가 자동으로 제공
> 초기값을 설정하지 않은 상태로 객체를 생성하려면 기본 생성자를 직접 정의
> 생성자를 1개 이상 정의 하려면 함수 오버로딩 기법을 이용하여 정의
# 정의 방법
> 함수 오버로딩 방법 : 생성자에 매개변수 개수와 자료형을 중복되지 않게 정의
> 디폴트 인수 방법 : 모든 매개변수에 초기값을 명시하여 정의
# 소스 코드
TEST1::TEST1()
{
}
TEST1::TEST1(int value) // 함수 오버로딩 방법
{
}
TEST1::TEST1(CString name = _T("일"), int value = 1) // 디폴트 인수 방법
{
}
# 복사 생성자 ( copy constructor )
> 자신과 같은 자료형의 객체를 참조로 전달(원본 객체)받아서 자기자신을 초기화
> 전달 받은 객체(원본 객체)와 같으면서도 메모리 영역은 완전 독립된 상태
# 특징
> 얕은 복사 : 기본 자료형의 데이터의 저장과 마찬가지로 대입 연산자를 이용하여 포인터(주소) 복사
- 값이 아닌 포인터를 복사하게 되어 메모리(heap) 영역을 참조하는 경우에 위험 ( 객체의 수명과 연관 )
> 깊은 복사 : 복사 생성자를 이용하여 데이터 값 복사
- 값을 그대로 복사 하게 되어 메모리 영역이 완전히 분리 된 상태이므로 참조하는 경우에 안전 ( 객체의 수명과 무관 )
# 소스 코드
TEST1::TEST1(const TEST1& rhs)
{
name = rhs.name;
value = rhs.value
}
int main(void)
{
TEST1 *pTTT1 = new TEST1;
TEST1 *pTTT2 = pTTT1; // 얕은 복사
delete pTTT1;
TEST1 ttt1("이", 2);
TEST1 ttt2(ttt1); // 깊은 복사
return 0;
}
'교육 관련 > C++' 카테고리의 다른 글
C++ 오버로딩/오버라이딩 (0) | 2022.04.16 |
---|---|
C++ 소멸자 (0) | 2022.04.01 |
C++ 생성자 및 this 포인터 (0) | 2022.03.29 |
C++ 클래스 (0) | 2022.03.27 |
C++ 함수 특징 (0) | 2022.02.28 |