산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial Internet of Things >> 임베디드

C++의 구조 및 클래스

C++는 계속해서 임베디드 개발을 위한 소수 언어이지만 프로젝트가 너무 커서 C를 효율적으로 사용할 수 없을 때 개발자가 일반적으로 채택합니다. 이러한 개발자는 일반적으로 C에서 C++로 전환하고 있으며 언어 간의 미묘한 차이는 학습 곡선의 중요한 부분을 나타냅니다. C++에는 C와 같은 구조가 있습니다. 그 구조는 동일하지 않기 때문입니다. C++에는 구조와 매우 유사한 클래스가 있습니다. 이 기사에서는 이러한 언어 요소에 대한 세부 정보를 제공합니다.

C의 구조

C의 구조는 기존 내장 데이터 유형(int , 문자 등), 비트 필드(지정된 비트 크기의 정수) 및 기타 구조. 아이디어는 함께 속하는 데이터 항목의 수를 집계하는 것입니다. 예를 들어 3차원 좌표를 저장하는 구조는 다음과 같습니다.

구조체 좌표{ float x; 플로트 y; float z;};

이 코드는 컴파일러에게 구조체 좌표를 알려줍니다. 처럼 보인다. 그런 다음 다음과 같이 이 유형의 변수를 선언할 수 있습니다.

구조체 좌표 위치

변수 위치 구조체 좌표 유형입니다. 내부 필드는 "점" 연산자를 사용하여 처리할 수 있습니다.

<사전>위치.x =1.0;위치.y =2.0;위치.z =9.99;

물론 세 개의 별도 float를 사용하여 유사한 효과를 얻을 수 있습니다. location_x와 같은 이름을 가진 변수 등. 그러나 위치를 처리하는 것이 훨씬 쉽습니다. 함수 등에 전달할 수 있는 단일 변수로.

비트 필드를 포함하는 기능은 구조에 C의 다른 곳에서 사용할 수 없는 기능을 제공합니다. 다음은 예입니다.

struct bitreg{ unsigned up:3; 서명되지 않은:3; 부호 없는 극성:2;};

struct bitreg 유형의 변수에 있는 각 필드 특정 비트 크기가 있습니다. 컴파일러는 데이터가 합리적인 방식으로 저장되도록 보장하므로 이러한 변수가 1바이트에 맞을 것으로 예상합니다. 또한 바이트 내의 필드에 액세스하기 위한 모든 "비트 배싱" 코드가 자동으로 생성됩니다. 따라서 프로그래머는 다음과 같이 간단히 액세스할 수 있습니다.

<사전> bitreg 제어를 구성합니다. control.up =1;control.down =2;control.polarity =3;

대부분의 경우 C에서 구조를 사용하는 것은 매우 간단하며 실행 효율성에 영향을 미치지 않으면서 코드를 더 쉽게 이해할 수 있습니다. 그러나 임베디드 개발자가 알아야 할 두 가지 사항이 있습니다.

C 구조가 새로운 데이터 유형처럼 보이지만 실제로는 그렇지 않습니다. 데이터 유형에는 일반적으로 수행할 수 있는 작업 범위가 있습니다. 이것은 C 구조의 경우가 아닙니다. 포인터를 만드는 것 외에 C 구조에 대해 무엇이든 하려면 내부 필드에 액세스해야 합니다. 이 문제는 C++에서 다룹니다.

C++의 클래스

C++ 언어에는 많은 객체 지향 기능이 있습니다. 그 중 하나는 클래스의 개념입니다. , 새로운 데이터 유형과 훨씬 더 유사한 것을 설명할 수 있습니다. 변수(일반적으로 객체 )은 인스턴스화될 수 있습니다. 수업에서; 즉, 이 새로운 유형의 개체입니다.

C++ 클래스는 C 구조와 거의 동일한 구문과 몇 가지 매우 유사한 기능을 가지고 있습니다. 그러나 몇 가지 중요한 차이점이 있습니다.

이러한 기능의 대부분은 이 예에 설명되어 있습니다.

class myclass{ char a; int b;public:void fun(); 내 수업(); ~마이클래스();}; myclass myobj; myobj.fun();

멤버 변수 ab 세 가지 멤버 함수 fun()에만 액세스할 수 있습니다. , myclass()~myclass() . 후자의 두 함수는 생성자와 소멸자입니다. 재미()만 사용자 코드에 의해 호출될 가능성이 있습니다. 세 가지 기능 모두에 대한 실제 코드는 다른 곳에서 정의되며 ::를 사용하여 클래스와 연결됩니다. 연산자, 따라서:

void myclass::fun(){ ...

C++의 구조

클래스 외에도 C++에는 C와 역호환되는 구조가 있습니다. 그러나 C++ 구조에는 클래스가 소유하는 것과 동일한 추가 기능이 있습니다. C++에서 구조체와 클래스의 차이점은 단 하나입니다. 우리가 보았듯이 클래스의 멤버 변수와 함수의 기본 액세스 가능성은 private입니다. 구조체의 기본값은 공개입니다. 따라서 이전 클래스의 기능은 다음과 같이 표현할 수도 있습니다.

struct mystruct{ void fun(); 내 수업(); ~myclass();비공개:char a; 정수 b;};

C++에서 클래스 및 구조 사용

이 정보를 입수한 후에는 이를 너무 많이 악용하지 않도록 권고됩니다. 추가 기능이 필요할 때 C 및 클래스에서 제공하는 기능 종류에 대해서만 구조를 사용하는 데에는 여러 가지 이유가 있습니다. 주로 코드 가독성의 문제입니다. 다른 개발자는 "비표준" 방식으로 작성된 코드와 세부 사항에 대해 명확하지 않을 수 있습니다.

코드를 작성할 때 가장 중요한 우선 순위는 코드를 읽을 수 있도록(=유지 관리 가능) 확인하는 것입니다. 누군가 – 당신일 수도 있습니다 – 1년 안에 이 코드를 보고 그것이 무엇을 하는지 이해해야 할 수도 있습니다. 몇 가지 조언:코드를 관리할 사람이 무장한 사이코패스이고 인내심이 제한적이며 집 주소를 알고 있다고 가정합니다.


임베디드

  1. C++ 변수, 리터럴 및 상수
  2. C++ 클래스 및 개체
  3. C++ 메모리 관리:신규 및 삭제
  4. C++ 공개, 보호 및 비공개 상속
  5. 세마포어:유틸리티 서비스 및 데이터 구조
  6. 이벤트 플래그 그룹:유틸리티 서비스 및 데이터 구조
  7. 자바 - 객체와 클래스
  8. C++의 스토리지 클래스
  9. C++ 날짜 및 시간
  10. C++ 데이터 구조