본문 바로가기

2023 c++

23년 C++ chap7 클래스와 생성자 -> 생성자와 소멸자(호출) / 필수 멤버함수

*이전 포스팅 내용 정리* -> 생성자와 소멸자의 선언,정의

생성자

1. 특징

ㄴ리턴값x

ㄴ이름 = 클래스 이름

ㄴconst한정자x

2. 종류

ㄴ매개변수 있는 생성자 / 기본 생성자 / 복사 생성자

3. 선언

Class Circle{
	public:
		Circle(double radius);        // 매개변수가 있는 생성자
		Circle();                     // 기본 생성자 -> 괄호 없어도 됨
		Circle(const Circle& circle); // 복사 생성자
		...
}

4. 정의

ㄴ생성자는 함수 헤더 뒤에 초기화 리스트 문법(:)을 사용해서 데이터멤버를 초기화(헤더와 본문 사이 :로 시작)

 

소멸자

1. 특징

ㄴ리턴값x

ㄴ이름 = ~클래스 이름

ㄴ객체가 스코프 벗어날 때 자동호출

ㄴ오버로드x

ㄴpublic 적용해야함

2. 선언

class Circle{
	...
	public:
		...
		~Circle(); //소멸자
}

3. 정의

//소멸자 정의
Circle::~Circle(){
	//문장
}

*복습 끝!*

03 생성자와 소멸자

4 생성자와 소멸자의 호출

Circle circle1(5,1);     //매개변수 있는 생성자
Circle circle2;          //기본 생성자
Circle circle3(aCircle); //복사 생성자 -> aCircle은 이미 존재하는 다른 객체
                         //소멸자 -> 시스템이 호출한다
멤버 클래스 자료형 내장 자료형
매개변수 있는 생성자 Circle circle1(10.0); double x1 = 10.0;
기본 생성자 Circle circle2; doble x2;
복사 생성자 Circle circle3(circle1) 없음
소멸자 사용자가 호출하지 않 사용자가 호출하지 않음

 

5 필수 멤버 함수

-클래스에는 아래 구분된 그룹별로 함수가 하나씩 필요하다

ㄴ만약 만들지 않으면 시스템이 해당 그룹의 함수를 자동으로 생성

  • 매개변수 있는 생성자 / 기본 생성자 -> (그룹1)
  • 복사 생성자 -> (그룹2)
  • 소멸자 -> (그룹3)

-그룹1

ㄴ매개변수 있는 생성자 or 기본 생성자 중 1개를 만들지 않으면, 시스템은 합성 기본 생성자를 만든다

ㄴ합성 기본 생성자는 데이터 멤버를 쓰레기 값으로 초기화한다

 

-그룹2

ㄴ복사 생성자를 만들지 않으면, 시스템은 합성 복사 생성자를 만든다

 

-그룹3

ㄴ소멸자를 만들지 않으면, 시스템은 합성 소멸자를 만든다

 

-> 되도록 직접 구현하는 것이 좋다