구조체와 클래스의 차이 중 가장 먼저 설명할 수 있는 것은
기본 접근 권한이 다르다는 것이다.
struct 는 기본적으로 public이고,
class 는 기본적으로 private이다.
컴퓨터는 struct와 class을 구분할까?
-> 어셈블리단에서는 이 둘의 차이가 있을까?
안난다.
C에 있던 기능이 다른 언어에 있다면, 고급 엔지니어가 만든 기능이다.
그럼 컴퓨터는 struct를 알까?
모른다. 그룹개념도 없다 따로따로 노는 건데 사실은,
메모리 어디에 접근한다 일 뿐이지,
클래스와 구조체는 거의 차이없이 돈다.
근데 컴파일러는 구분할까?
구분한다.
컴파일러 에러가 잡아내기 때문에
컴파일러는 private와 pubilc의 차이점을 안다.
구조체에 관한 코딩표준(기본)
C++에서는 구조체를 클래스처럼 쓸 수 있다.
- 하지만 제발 절대 그러지 말 것
- 클래스는 클래스로 쓰고 구조체는 구조체처럼! - 구조체는 C스타일로 쓰자
struct는 순수하게 데이터뿐이여야 한다(Plain Old Data, POD)
- Plain Old Data -> 원시 데이터 int, float, char...로!
(메모리 카피가 가능하도록 원시 데이터 외에 사용하지 않아야 한다.) - 사용자가 선언한 생성자나 소멸자 X
- static 아닌 private/protected 멤버 변수 X
(=멤버 변수는 전부다 public으로하자) - 가상 함수 X ( = 가상 함수 같은 건 없어야 한다.)
- 메모리 카피가 가능하다
- memcpy()를 사용하여 struct를 char[]로, 혹은 반대로 복사할 수 있음
위에서 Plain Old Data라고 했는데 간혹
포인터를 집어 넣는 경우는 있지만,
(포인터를 집어 넣는 경우에는
데이터 + 생성자 소멸자를 집어넣어서
메모리 할당과 해제를 관리해줘야한다.)
멤버 함수 넣고 이런 건 없다.
그런 건 해서도 안된다.
'프로그래밍 언어 > C & C++ 정리' 카테고리의 다른 글
C++ 함수 오버로딩과 C언어의 _Generic (4) | 2024.11.03 |
---|---|
복사 생성자 (4) | 2024.11.02 |
new와 malloc의 차이 (1) | 2024.11.01 |
Java와 C++의 차이로 배우는 소멸자와 const 멤버 함수 (4) | 2024.10.31 |
Java와 C++ 로 비교하는 - 초기화 리스트와 기본 생성자 (1) | 2024.10.31 |