구조체와 클래스를 사용할 때 어떤 오버 헤드와 기타 고려 사항이 있습니까?

임베디드 시스템의 C는 전통적으로 구조화 된 데이터를 보유하기 위해 구조체를 사용했습니다.

Arduino는 C ++를 테이블에 제공하므로 클래스를 사용할 수 있습니다. 대신.

매우 유사한 것으로 간주 될 수있는 두 가지 데이터 구조가 있다고 가정 해 보겠습니다.

typedef struct { int valueOne; int valueTwo; int valueThree; } value_t; 

및 :

class Value { public: int valueOne; int valueTwo; int valueThree; } 

메모리 측면에서 어떤 차이를 만들까요?

아직도 구조체 기술이 많이 사용되는 것을 볼 수 있습니다. 왜 이런가요?

코멘트

  • 내 C ++를 올바르게 기억한다면 기본 표시 외에 structclass 사이에는 차이가 없습니다.
  • 는 주로 대부분 임베디드 하드웨어가 C로 코딩되어 있기 때문에 사용됩니다. 따라서 소형 MCU 용 코드를 작성하는 데 많은 시간을 소비하는 사람은 아마도 C를 C ++보다 훨씬 잘 알고있을 것입니다. 그리고 C ++ 관용구보다 먼저 C 관용구에 자동으로 도달합니다. ' 프로그래머 성능 문제입니다.

답변

C ++에서 클래스와 구조체를 언제 사용해야합니까?

C ++에서 클래스와 구조체의 유일한 차이점은 구조체에는 기본 공용 멤버와베이스가 있고 클래스에는 기본 전용 멤버와베이스가 있다는 것입니다. 클래스와 구조체 모두 공용 멤버와 전용 멤버를 혼합 할 수 있고 상속을 사용할 수 있으며 멤버 함수를 가질 수 있습니다.

클래스와 같은 기능이없는 일반 데이터 구조로 구조체를 사용하는 것이 좋습니다. 클래스를 개인 데이터 및 멤버 함수와 함께 집계 데이터 구조로 사용합니다.

메모리 측면에서 액세스 수정자는 차이를 만들지 않으며 Arduino의 메모리 제약 조건이 주어지면 사람들은 복잡한 계층 구조의 클래스를 사용할 가능성이 적지 만 어쨌든 POD 구조를 선호합니다.

Answer

C와 달리 인스턴스 C ++의 structclass의 인스턴스와 똑같은 방식으로 객체입니다. 컴파일 된 코드의 관점에서 보면 동일합니다. 메모리 사용량, 정렬, 액세스 시간 등은 정확히 동일합니다 (즉, 오버 헤드가 없습니다).

프로그래머의 관점에서 보면 아주 작은 차이가 있습니다. div id = “83e94f536c”>

는 기본적으로 공개적으로 표시되지만 class의 구성원은 기본적으로 비공개로 표시됩니다. 그렇지 않으면 모든 언어 기능이 둘 다에서 동일하게 작동합니다. 생성자 / 소멸자, 상속, 다형성, 템플릿 및 연산자 오버로딩과 같은. class에서 struct를 파생 할 수도 있고 그 반대도 가능합니다. 마찬가지입니다.

유사성에도 불구하고 사람들이 매우 단순한 구조를 위해 의도적으로 C ++에서 struct를 사용하는 것을 보는 것은 매우 일반적입니다. 몇 개의 데이터 멤버로만 구성되지만 기능은 없습니다. class는 더 복잡한 경우에 사용됩니다. 이것은 순전히 관습이나 개인적 선호의 문제이며 구조의 의도 된 복잡성을 미묘하게 표시하는 데 사용할 수 있습니다.

답변

다른 답변에서 지적했듯이 귀하의 특정 structclass는 성능면에서 구별 할 수 없습니다. 구조체를 정의한 방식으로 인한 유형 이름의 범위). C ++의 묘사는 structclass 사이에 있지 않지만 POD (일반 이전 데이터) 유형과 그렇지 않은 유형 (이 토론 에 설명 됨)간에.

답변

메모리 측면에서 어떤 차이가 있습니까?

없음. 구조체와 클래스는 동일하며 보호 수준 만 다르며 둘 중 하나를 인스턴스화하면 “객체”가 생성됩니다.

구조 기법이 여전히 많이 사용되는 것을 볼 수 있습니다. 그 이유는 무엇입니까?

입력이 적습니다. ” 데이터 멤버를 숨기려고하지 않습니다.

답변

참고

typedef struct { ... } Foo; 

는 C ++에서 더 이상 사용되지 않으며

struct Foo { ... }; 

답은 명확하지 않지만 구조체의 다른 효과는 다음과 같습니다. 기본적으로 공용 상속과 클래스를 사용한 개인 상속.

다른 사람들이 언급했듯이 struct를 사용하는 것은 일반적으로 POD 유형에 대한 규칙입니다.

또한 기술적으로 “struct vs object”는 “struct vs class”(구조체 또는 클래스를 인스턴스화하면 여전히 객체가 제공됨).

댓글

  • 수정 된 질문 개체-> 클래스

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다