반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

폴크(FOLC)

C++ 기본/복사 생성자 본문

교육 관련/C++

C++ 기본/복사 생성자

folcjin 2022. 3. 31. 09:58
728x90
반응형

# 기본 생성자 ( 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;
}

728x90
반응형
사업자 정보 표시
사업자 등록번호 : -- | TEL : --

'교육 관련 > 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