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 는 불가능(주소만 복사되어서 값을 도출하기 위해 주소를 따라가야 됨)
- memcpy() 를 사용하여 struct 를 char[ ] 로, 또는 반대로 복사할 수 있음
(간략한 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 |