관리 메뉴
Automotive Software
참조자 본문
- 변수 및 클래스 등 선언 시 사용된 이름 대신 해당 타깃에 접근할 수 있는 하나의 별칭이자 동의어
- 선언 방법
- 타겟의_형 참조_연산자(&) 참조자의_이름
- 선언 후 반드시 초기화, 미 초기화 시 컴파일러 오류 보고
int myInteger;
int & rMyInteger = myInteger;
cMyClass myClass;
cMyClass & rMyClass = myClass;
- 타겟의 주소 == 참조자의 주소
- &myClass == &rMyClass
- C++에서는 참조자의 주소 접근방법을 별도로 명시하지 않음
- 참조자의 초기화
- 눌(NULL) 초기화 허용 안됨 ; 항상 어떤 타깃을 가리켜야 함 ;애기치 못한 동작 발생
- 초기화 시 한번 타깃을 가리키면 다른 타깃을 가리킬 수 없음
- 동적 메모리상 : NULL 초기화가 되지 않도록 확인 필요!!!
cMyClass *pMyClass = new cMyClass; if( pMyClass != NULL ) cMyClass & rMyClass = *pMyClass;
- 참조자에서의 멤버 접근
- 클래스 멤버 접근 연산자 (.)을 사용 ; 일반 클래스 멤버 자료 또는 멤버 함수(메소드) 접근과 동일
- rMyclass.memFunc(); 또는 rMyClass.memVar = 100;
- 함수 인자를 참조자로 만들면
- 함수동작을 어느 정도 숨길수 있음
- 포인터 인자의 경우 해당 인자의 변경을 예상할 수 있음
- 파라미터의 형태 (값 또는 포인터)에 대한 걱정이 필요 없음
- 전달 값을 읽기만 하거나 또는 변경할 수도 있음
- 효율적
- 포인터보다 사용이 간단
- 복사 생성자(파괴자)의 호출을 줄여줌
- 포인터나 참조자가 아닌 값의 형태로 인자를 전달하면 특정 생성자가 스택에 저장될 때마다 해당 객체에 대한 복사가 복사 생성자에 의해 발생하고 함수 종료 시 파괴자 호출됨
- 주의할 점
- 상수를 직접 넣으면 안됨
- 함수동작을 어느 정도 숨길수 있음
'프로그래밍 (Programming) > C++ (C Plus Plus) 기초' 카테고리의 다른 글
다형성 (Polymorphism) (0) | 2021.01.07 |
---|---|
상속 (Inheritance) (0) | 2021.01.02 |
연산자 중첩 (0) | 2020.12.29 |
객체 초기화 (0) | 2020.12.29 |
멤버함수 기본값 vs 멤버함수 중첩 (0) | 2020.12.28 |