工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> 埋め込み

C ++の構造とクラス

C ++は、組み込み開発の少数言語であり続けますが、プロジェクトが大きくなりすぎてCを効率的に使用できない場合に、開発者によって一般的に採用されます。これらの開発者は通常、CからC ++に移行しており、言語間の微妙な違いは、学習曲線の重要な部分を表しています。 C ++には、Cと同じように、同じではない構造があります。 C ++には、構造に非常によく似たクラスがあります。この記事では、これらの言語要素の詳細を明らかにします。

Cの構造体

Cの構造体は、カスタマイズされた複合データ項目(オブジェクト)であり、既存の組み込みデータ型( int )から構築できます。 、 char など)、ビットフィールド(指定されたビットサイズの整数)およびその他の構造。アイデアは、一緒に属するデータのいくつかのアイテムを集約することです。たとえば、3次元座標を保持する構造は次のようになります。

構造体座標{floatx;フロートy; float z;}; 

このコードは、コンパイラに構造体座標を通知します。 のように見えます。次に、このタイプの変数を次のように宣言できます。

構造体座標の場所; 

変数場所 タイプは構造体座標です その内部フィールドは、「ドット」演算子を使用してアドレス指定できます:

 location.x =1.0; location.y =2.0; location.z =9.99; 

もちろん、同様の効果は3つの別々のフロートを使用して達成できます。 location_x のような名前の変数 など。ただし、場所の処理ははるかに簡単です。 関数などに渡すことができる単一の変数として。

ビットフィールドを含める機能により、構造体にはCの他の場所では利用できない機能が提供されます。例を次に示します。

 struct bitreg {unsigned up:3;サインダウンなし:3;符号なし極性:2;}; 

タイプ struct bitreg の変数の各フィールド 特定のビットサイズがあります。コンパイラーは、データが適切な方法で格納されることを保証するため、このような変数が1バイトに収まることが期待されます。さらに、バイト内のフィールドにアクセスするためのすべての「ビットバッシング」コードが自動的に生成されます。したがって、プログラマーはこれらに簡単にアクセスできます。

 struct bitreg control; control.up =1; control.down =2; control.polarity =3; 

ほとんどの場合、Cで構造体を使用することは非常に簡単であり、実行効率に影響を与えることなくコードを理解しやすくします。ただし、組み込み開発者が注意する必要がある2つのポイントがあります。

C構造体は新しいデータ型のように見えますが、実際にはそうではありません。データ型には通常、実行可能な一連の操作があります。これはC構造体には当てはまりません。 C構造体へのポインタを作成する以外に、C構造体に対して何かを行うには、内部フィールドにアクセスする必要があります。この問題はC ++で対処されています。

C ++のクラス

C ++言語には、多くのオブジェクト指向機能があります。これらの1つは、クラスの概念です。 、これにより、新しいデータ型のようなものの記述が可能になります。変数(通常はオブジェクトと呼ばれます )インスタンス化される場合があります クラスから;つまり、この新しいタイプのオブジェクトです。

C ++クラスは、C構造体とほぼ同じ構文であり、いくつかの非常に類似した機能を備えています。ただし、いくつかの重要な違いがあります:

これらの機能のほとんどは、この例で示されています:

 class myclass {char a; int b; public:void fun();私のクラス(); 〜myclass();}; myclass myobj; myobj.fun(); 

メンバー変数 a および b 3つのメンバー関数 fun()にのみアクセスできます 、 myclass() および 〜myclass() 。後者の2つの関数は、コンストラクタとデストラクタです。 fun()のみ ユーザーコードによって呼び出される可能性があります。 3つの関数すべての実際のコードは、他の場所で定義され、 ::を使用してクラスに関連付けられます。 したがって、演算子:

 void myclass ::fun(){... 

C ++の構造

クラスに加えて、C ++には、Cと下位互換性のある構造があります。ただし、C ++構造には、クラスが持つのと同じ追加機能もあります。これは、C ++の構造体とクラスの唯一の違いです。これまで見てきたように、クラス内のメンバー変数と関数のデフォルトのアクセシビリティはプライベートです。構造体のデフォルトはpublicです。したがって、以前のクラスの機能も次のように表すことができます。

 struct mystruct {void fun();私のクラス(); 〜myclass(); private:char a; int b;}; 

C ++でのクラスと構造の使用

この情報を取得したら、それを過度に悪用しないように促されます。追加の機能が必要な場合に、Cおよびクラスで提供される種類の機能の構造のみを使用する理由はたくさんあります。主に、それはコードの可読性の問題です。別の開発者は詳細についてあまり明確ではない可能性があり、「非標準」の方法で記述されたコードは混乱を招きます。

コードを作成する際の重要な優先事項は、コードが読み取り可能(=保守可能)であることを確認することです。誰か(あなたかもしれません)は、1年以内にこのコードを見て、それが何をするのかを理解する必要があるかもしれません。いくつかのアドバイス:あなたのコードを維持する人は、忍耐力が限られており、あなたの自宅の住所を知っている武装した精神病質者であると仮定します。


埋め込み

  1. C++ の変数、リテラル、および定数
  2. C++ クラスとオブジェクト
  3. C++ メモリ管理:新規および削除
  4. C++ の公開、保護、非公開の継承
  5. セマフォ:ユーティリティサービスとデータ構造
  6. イベントフラググループ:ユーティリティサービスとデータ構造
  7. Java - オブジェクトとクラス
  8. C++ のストレージ クラス
  9. C++ 日付と時刻
  10. C++ データ構造
  11. C++ オーバーロード (演算子と関数)