키워드 struct를 대신해서 class를 사용하면, 구조체가 아닌 클래스가 된다. 즉, 아래의 코드는 클래스의 정의이다.

class Car
{
    char gamerID[CAR_CONST::ID_LEN];
    int fuelGauge;
    int curSpeed;
    
    void ShowCarState() { . . . . }
    void Accel() { . . . . }
    void Break() { . . . . }
};

 

유일한 차이점이라고 하면, 문자 "struct"가 아닌 "class"를 사용한 것이다. 하지만 위와 같이 키워드를 바꿔놓을 경우 아래와 같이 구조체 변수를 선언하지 못한다.

 

Car run99 = {"run99", 100, 0};	(X)

 

그 이유는 클래스 내 선언된 함수가 아닌, 다른 영역에서 변수를 초기화하려 했기 때문이다. 클래스는 별도의 선언을 하지 않으면 클래스 내에 선언된 변수는 클래스 내에 선언된 함수에서만 접근가능하다. 따라서 다음과 같은 형태로 클래스 변수를 선언해야 한다.

 

Car run99;	(O)

 

클래스 내에 선언된 변수의 경우 기본적으로 클래스 내에 선언된 변수에서만 접근이 가능하다. 접근과 관련하여 별도의 선언을 하지 않을 경우 클래스 내에 선언된 변수 및 함수에 대한 접근은 허용하지 않는다. 따라서 이를 허용하기 위해

 

클래스는 정의를 하는 과정에서 각각의 변수 및 함수의 접근 허용범위를 별도로 선언해야 한다. 이것이 키워드 struct를 이용해서 정의하는 구조체와 키워드 class를 이용해서 정의하는 클래스의 유일한 차이점이다.

 

class에서 접근 제어에 사용되는 접근제어 지시자의 경우 총 세가지가 존재한다.

  • public : 어디서든 접근허용
  • protected : 상속관계에 놓여있을 때, 유도 클래스에서의 접근허용
  • private : 클래스 내(클래스 내에 정의된 함수)에서만 접근허용

 

구조체 또한 클래스와 마찬가지로 지시자의 선언이 가능하고, 그 의미도 같다. 다만 접근제어 지시자를 선언하지 않았을 경우 클래스는 private로, 구조체는 public으로 선언한다.

 

Reference


[1] 윤성우의 열혈 C++ 프로그래밍

Call by value 예제


void SwapByValue(int num1, int num2)
{
    int temp = num1;
    num1 = num2;
    num2 = temp;
} // Call-by-value

 

 

Call by reference 예제


void SwapByRef(int * ptr1, int * ptr2)
{
    int temp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = temp;
} // Call-by-reference

 

Reference


[1] 윤성우의 열혈 C++ 프로그래밍

+ Recent posts