제가 대학교 1학년 때 [명품 C++ Programming] 교재로 진행되는 C++ 수업에서 배운 내용을 교재와 ppt를 중심으로 정리한 내용입니다.
(2022.9 ~ 2022.12)
당시에 공부를 위해서 HWP 파일로 정리해 놓은 것을 그대로 올립니다.
🍑함수의 인자 전달 방식
값에 의한 호출
- 함수가 호출되면 매개변수가 스택에 생성
- 호출하는 코드에서 넘겨주는 실인자 값이 함수의 매개변수에 복사되어 전달
- 장점
- 함수내에서 실인자를 손상 불가 → 함수 호출에 따른 부작용X
주소에 의한 호출
- 함수가 호출되면 포인터 타입의 매개변수가 스택에 생성
- 호출하는 코드에서 주소를 직접 포인터 타입의 매개 변수에 전달 받음
- 기본 타입 변수나 객체의 경우 주소 전달
- 배열의 경우 배열의 이름(=배열의 주소) 전달
- 의도적으로 함수내에서 실인자의 값을 변경하고자 할 때 이용됨
🍑함수 호출시 객체 전달
- 기본 타입과 객체를 전달하는 것은 여러 가지 면에서 다름
값에 의한 호출로 객체 전달
-
함수를 호출하는 쪽에서 객체 이름만 사용하여 객체 전달
→ 함수이름(객체이름);
-
함수의 매개 변수 객체를 생성하면, 매개 변수 객체의 공간이 스택에 할당되고, 호출하는 쪽의 객체가 매개 변수 객체에 그대로 복사
-
매개 변수 객체의 생성자는 호출되지 않는 반면, 매개 변수 객체의 소멸자는 호출됨 → 비대칭 실행 구조 (단, 복사생성자는 호출)
-
호출되는 순간의 실인자 객체 상태(전달받은 원본의 상태)를 매개 변수 객체에 그대로 전달하기 위해 매개변수 객체의 생성자가 실행되지 않음.
-
객체 생성시 다른 객체의 값으로 초기화 되는 경우 복사생성자에 의한 객체 초기화
클래스 이름 객체 이름 = 객체 이름;
- 함수의 매개변수로 객체가 전달
단점
실인자 객체의 크기가 크면 객체의 복사 시간이 커짐
장점
매개 변수 객체에 변화가 일어나고 실인자를 훼손시키지 않음
주소에 의한 호출로 객체 전달
- 함수의 매개 변수를 객체에 대한 포인터로 선언
- 함수 호출 시 생성자 소멸자가 실행되지 않는 구조
- 함수 호출 시 매개변수에
&객체이름 형식으로 주소를 전달해야함
장점
- 원본 객체를 복사하는 시간 소모X
- 생성자 소멸자의 비대칭 문제X
단점
본 객체를 훼손할 가능성 존재
🍑객체 치환 및 객체 리턴
객체 치환
- 객체의 모든 데이터가 비트 단위로 복사됨
- 동일한 클래스 타입 끼리만 가능
- 치환된 두 객체는 내용물만 같을 뿐 독립적 공간 유지(별개임)
함수의 객체 리턴
return 객체이름; 형식으로 리턴
- return문이 실행되면 객체의 복사본이 생기고 함수를 호출한 곳으로 복사본이 전달된 다음에 객체는 소멸됨