본문 바로가기

[열강C++]클래스의 내부접근과 외부접근

반응형

지역객체의 특성 - stack영역에 저장이 되며 예를 들어 main문에 지역객체가 있다고 한다면 main문이 끝남과 동시에 메모리에서 사라진다.

   

맴버함수 내에서 접근하는 변수는 항상 맴버변수에서 찾는다. 맴버변수가 우선순위를 갖는다.

   

맴버(맴버변수 , 맴버함수)에 접근하는 방식은 두 가지로 생각해 볼 수 있다.

   

지정한 클래스 내부에서 접근하면 내부접근 그 외에서 접근하는 것은 외부접근.

   

클래스를 하나의 자료형으로 생각하기.

   

const int OPEN = 1; (전역변수가 const를 사용해서 상수가 된 것.)

ocnst int CLOSE = 2;


public >> protected >>private 접근성

   

private는 class 내부접근만 허용

   

protected - 상속이라는 개념과 연관이 있고 상태는 private와 public의 중간상태를 허용함.

   

cout << ((state == OPEN) ? "OPEN" : "CLOSE") << "\n";

state 가 OPEN이랑 똑같으면 OPEN을 출력하고 다르면 CLOSE를 출력하라.

   

Class를 정의하는데 접근제어 키워드를 아애 써주지 않으면 기본적으로 private를 쓰게 된다.

   

하지만 C++에서는 struct를 써도 되는데 클래스와 거의 똑같다. struct는 접근제어 키워드를 아무것도 설정해 주지 않으면 기본적으로 public으로 설정된다. 이것이 class와 struct의 유일한 차이점.

   

class 함수를 외부에 정의하는 이유는 함수가 커지면 class가 한눈에 들어오지 않는 점 때문에 클래스의 밖에 정의한다.

   

void Door::Open(){} //Door라는 클래스 내에 Open이라는 함수를 정의

   

lnline화 // C에서는 #define이라는 것을 사용.

   

클래스 내부에 함수를 포함시켜면 인라인화 시키라는 뜻이 포함되어 있는 것이고 외부로 빼서 선언하면 인라인화 시키라는 뜻이 빠져있는 것이다.

하지만 외부에서 함수를 정의할 때도 inline이라는 키워드를 앞에 붙여주면 class 안에서 함수를 선언하는 것과 똑같다.

   

C++ 컴파일러는 최적화를 하기 때문에 위와 같이 해놓는다고 꼭 inline화하는 것은 아니다. 컴파일러 기준에서 필요하다고 하면 inline화 한다.

inline 이라는게 뭐였지???

   

   

   

Door.h = 예를 들어 Door의 선언은 헤더파일로 정의 (맴버와 기능만 보고싶다.)

Door.cpp = Door안에 있는 함수의 기능을 보고 싶다.

#include "Door.h"을 포함시켜야 함.

Main.cpp

#include "Door.h" 을 포함시켜야 함.

   

반응형
-->