본문 바로가기

C++/FOCU_C++

C++ chpt8.

const 멤버 함수

// Vector.h

class Vector
{
public:
    void SetX(int x);
    void SetY(int y);
    int GetX() const;
    int GetY() const;
    void Add(const Vector& other);
private:
    int mX;
    int mY;
};

 

const 란?

  • 바꿀 수 없는 것
// const 변수
cosnt int LINE_SIZE = 20;
LINE_SIZE = 10; // 컴파일 에러

----------------------------------------------------------

// const 메서드. 해당 개체 내부에서 해당 함수를 통해 접근할 경우 어떠한 것도 바꿀 수 없음
int GetX() const;

-----------------------------------------------------------

// 멤버 변수가 변하는 것을 방지
int GetX() const
{
    return mX;
}

void AddConst(const Vector& other) const
{
    mX = mX + other.mX;	// 컴파일 에러
    mY = mY + other.mY; // 컴파일 에러
}

 

 

구조체(Struct) VS 클래스(Class)

기본 접근 권한

  • struct
    • pubilc
  • class
    • private
// struct 

struct Vector
{
    int X;
    int Y;
};
// 접근권한 명시 없을 경우 'public' 이 기본값

------------------------------

// clsss

class Vector
{
    int mX;
    int mY;
}
// 접근권한 명시 없을 경우 'private' 가 기본값

 

C++  에선 class 에서 할 수 있는 모든 것은 strcut 에서도 가능

 

둘의 차이는 크게 없으며, 접근권한이 어떤 것으로 default 되어 있는지의 차이 정도만 존재함

 

컴퓨터 또한 구분할 수 없으나, 컴파일러는 구분 가능

 

 

구조체에 관한 코딩 표준

C++ 애선 구조체를 클래스 처럼 쓸 수 있음

  • 하지만 그렇게 사용하지 않을 것을 지향
  • 구조체는 C 스타일로 사용할 것을 지향

struct 는 순수하게 '데이터'뿐이어야 함 (plain Old Data, POD)

  • 사용자가 선언한 생성자나 소멸자 x (유연하게는 메모리 관리를 하기위해 허용을 하는 곳도 있음)
  • static 이 아닌 private / protected 멤버 변수 x
  • 가상 함수 x
  • 메모리 카피가 가능해야함
    • memcpy() 를 사용하여 struct 를 char[ ] 로, 또는 반대로 복사할 수 있음
      • 객체를 복사했을 때,  멤버 변수의 값 또한 복사가 가능한 것을 추구
      • 순수한 데이터로 구성된 struct 는 가능
      • 객체를 포함할 수 있는 class 는 불가능(주소만 복사되어서 값을 도출하기 위해 주소를 따라가야 됨)

(간략한 C++ 에서의 구조체 설명은 윤성우의 열혈 C++ chpt4. 여기에서도 다루니 필요하다면 참고 해봐도 좋을 것 같다)

 

 

 

 

'C++ > FOCU_C++' 카테고리의 다른 글

C++ chpt9.  (4) 2025.07.24
C++ chpt7.  (2) 2025.07.01
C++ chpt6.  (1) 2025.05.16
C++ chpt5.  (0) 2025.05.04
C++ chpt4.  (0) 2025.05.03