본문 바로가기
c++

5주차 - 접근 지정자, 인라인 함수, 헤더, 객체 포인터

by 몰라몰라개복치 2020. 5. 31.

접근지정자 

 

 

캡슐화의 목적

 

- 객체 보호, 보안

- C++에서 객체의 캡슐화 전략 

 

  • 객체의 상태를 나타내는 데이터 멤버(멤버 변수)에 대한 보호
  • 중요한 멤버는 다른 클래스나 객체에서 접근할 수 없도록 보호 
  • 외부와의 인터페이스를 위해서 일부 멤버는 외부에 접근 허용

 

 

 

멤버에 대한 3가지 접근 지정자

 

private: 동일한 클래스의 멤버 함수에만 제한

public: 모든 다른 클래스에 허용

protected: 클래스 자신과 상속받은 자식 클래스에만 허용

(*클래스 생성부에서 사용)

 

(1) 접근 지정은 중복 가능

중복 접근 지정

 

(2) 디폴트 접근 지정은 private

->위의 두 사진은 같은 의미

 

(3). 멤버 변수는 private로 지정하는 것이 바람직

 

 

 

 

인라인 함수

 

인라인 함수: inline 키워드로 선언된 함수

 

인라인 함수에 대한 처리

>인라인 함수를 호출하는 곳에 인라인 함수 코드를 확장 삽입

  - 매크로와 유사 

  - 코드 확장 후 인라인 함수는 사라짐

>인라인 함수 호출

  - 함수 호출에 따른 오버헤드 존재하지 않음

    (오버헤드: 프로그램의 실행 흐름 도중에 동떨어진 위치의 코드를 실행시켜야 할 때 추가적으로 시간, 메모리, 자원이 사용되는 현상)

  - 프로그램의 실행 속도 개선

>컴파일러에 의해 이루어짐

 

인라인 함수의 목적 및 장단점

(장점)

- C++ 프로그램의 실행 속도 향상

(단점)

- 인라인 함수 코드의 삽입으로 컴파일된 전체 코드 크기 증가

 

 

 

EX) 인라인 함수 예시

 

 

 

(컴파일러에 의해 inlint 함수의 코드 확장 삽입)

 

<인라인 제약 사항> 

- inline은 컴파일러에게 주는 일종의 추천 메시지

- 컴파일러가 선택적으로 필요에 따라 inline 수용

- recursion, 긴 함수, static, 반복문, goto 문 등을 가진 함수는 수용하지 X

 

 

자동 인라인 함수: 클래스 선언부에 구현된 멤버 함수

- inline으로 선언할 필요 X

- 컴파일러에 의해 자동으로 인라인 처리

- 생성자를 포함, 모든 함수가 자동 인라인 함수 가능

 

 

 

 

바람직한 C++ 프로그램 작성법

 

클래스를 헤더 파일과 cpp 파일로 분리하여 작성

- 클래스마다 분리 저장

- 클래스 선언 부 (헤더 파일(.h)에 저장)

- 클래스 구현 부 (cpp 파일에 저장)

- main() 등 전역 함수나 변수는 다른 cpp 파일에 분산 저장

 

목적: 클래스 재사용

 

 

헤더 파일의 중복 include 문제

- 'class' 형식 재정의로 인한 컴파일 오류 발생 가능

 

 

 

 

객체 포인터

객체에 대한 포인터

- C 언어의 포인터와 동일

- 객체의 주소값을 가지는 변수

포인터로 멤버를 접근할 때

- 객체 포인터 -> 멤버

 

 

 

 

 

 

 

참고: 황기태의 c++ 프로그래밍