Automotive Software

참조자 본문

프로그래밍 (Programming)/C++ (C Plus Plus) 기초

참조자

AutoSW 2020. 12. 28. 01:09
  • 변수 및 클래스 등 선언 시 사용된 이름 대신 해당 타깃에 접근할 수 있는 하나의 별칭이자 동의어
  • 선언 방법
    •  타겟의_형  참조_연산자(&)  참조자의_이름
    • 선언 후 반드시 초기화, 미 초기화 시 컴파일러 오류 보고
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