C++ 例付き構造体

⚡ スマートサマリー

構造 C++ これは、異なるデータ型の要素を単一の名前の下にグループ化するユーザー定義データ型であり、1つの変数に人名、国籍、年齢などの関連する値をまとめて保持することを可能にします。

  • 📦 異なるデータ型: 構造体は、異なる型の変数をユーザー定義の名前の下にグループ化します。
  • 🔑 structキーワード: structキーワードを使用して構造体を定義し、中括弧内にメンバーを列挙します。
  • 🧱 インスタンスの作成: 記述するPerson pは構造体変数を作成し、そのメモリを割り当てます。
  • 🎯 ドット演算子: インスタンスを介して任意のメンバーを読み取ったり設定したりします。例: p.age = 27。
  • ポインタと関数: 構造体はポインタを扱い、通常の引数のように関数に渡されます。
  • 🤖 AI支援: GitHub Copilotやその他のAIアシスタントは、コメントから構造体の定義とメンバーアクセスを生成して構築します。

C++ ストラクト

構造体とは何か C++?

STRUCTとは C++ 異なるデータ型の要素を一緒に保存するために使用できるデータ構造。 C++構造体はユーザー定義データ型です。構造体はグループのデータ型を作成します。ping 異なるデータ型の項目を単一のデータ型の下にまとめる。

具体的な例を挙げますと、以下の通りです。

誰かの名前、市民権、年齢などの情報を保存する必要があるとします。 名前、市民権、年齢などの変数を作成して、データを個別に保存できます。

しかし、将来的には多くの人に関する情報を保存する必要が生じる可能性があります。つまり、異なる個人ごとに変数を作成する必要が出てきます。例えば、名前1、国籍1、年齢1などです。これを避けるには、構造体を作成するのが良いでしょう。

ストラクチャーをいつ使用するか?

構造を使用する理由は次のとおりです。 C++.

  • 異なるデータ型の要素を XNUMX つのデータ型に格納する必要がある場合は、構造体を使用します。
  • C++ 構造体は参照型ではなく値型です。作成後にデータを変更する予定がない場合は、構造体を使用します。

C++ 構造体の初期化

作成するには C++ 構造体を作成するには、structキーワードに続いて識別子を使用します。識別子は構造体の名前になります。以下は構造体を作成するための構文です。 C++ 構造体:

構文:

struct struct_name  
{  
     // struct members
}   

上記の構文では、struct キーワードを使用しました。 struct_name は構造体の名前です。

構造体のメンバーは中括弧内に追加されます。 これらのメンバーは、おそらく異なるデータ型に属しています。

具体的な例を挙げますと、以下の通りです。

struct Person  
{  
    char name[30];  
     int citizenship;  
     int age;  
}  

上の例では、 person は 2 つのメンバーを持つ構造体です。 メンバーには名前、国籍、年齢が含まれます。 XNUMX つのメンバーは char データ型ですが、残りの XNUMX つは構造体の作成時に整数であり、メモリは割り当てられません。 メモリは、変数が構造体に追加された後にのみ割り当てられます。

構造体インスタンスの作成

上の例では、Person という名前の構造体を作成しました。 次のように構造体変数を作成できます。

Person p;

p は Person 型の構造体変数です。 この変数を使用して、構造体のメンバーにアクセスできます。

構造体のメンバーへのアクセス

構造体のメンバーにアクセスするには、構造体のインスタンスとドット (.) 演算子を使用します。たとえば、構造体 Person のメンバー age にアクセスするには、次のようにします。

p.age = 27;

構造体のインスタンス p を使用して、構造体 person のメンバーの年齢にアクセスしました。 次に、メンバーの年齢の値を 27 歳に設定しました。

例1:

#include <iostream>    
using namespace std;
struct Person
{
	int citizenship;
	int age;
};
int main(void) {
	struct Person p;
	p.citizenship = 1;
	p.age = 27;
	cout << "Person citizenship: " << p.citizenship << endl;
	cout << "Person age: " << p.age << endl;

	return 0;
}

出力:

構造体のメンバーへのアクセス

コードのスクリーンショットは次のとおりです。

構造体のメンバーへのアクセス

Code 説明:

  1. プログラムに定義されている関数を使用するには、iostream ヘッダー ファイルをプログラムに組み込みます。
  2. std 名前空間を含めると、呼び出さずにそのクラスを使用できます。
  3. Person という名前の構造体を作成します。
  4. 構造体本体の始まり。
  5. 整数型の Citizenship という名前の構造体メンバーを作成します。
  6. age という名前の整数型の構造体メンバーを作成します。
  7. 構造体本体の終わり。
  8. main() 関数を呼び出します。 プログラム ロジックは、この関数の本体内に追加する必要があります。
  9. 構造体 Person のインスタンスを作成し、それに p という名前を付けます。
  10. 構造体メンバーの市民権の値を 1 に設定します。
  11. 構造体メンバーの age の値を 27 に設定します。
  12. 構造体メンバーの市民権の値を他のテキストとともにコンソールに出力します。
  13. 構造体メンバー age の値を他のテキストとともにコンソールに出力します。
  14. プログラムが正常に実行された場合、プログラムは値を返す必要があります。
  15. main() 関数の終わり。

構造体へのポインタ

構造体を指すポインタを作成することもできます。これは、int、float、doubleなどのネイティブデータ型を指すポインタの作成方法に似ています。 C++ メモリ位置を保存します。

例2:

#include <iostream>
using namespace std;

struct Length
{
	int meters;
	float centimeters;
};

int main()
{
	Length *ptr, l;

	ptr = &l;

	cout << "Enter meters: ";
	cin >> (*ptr).meters;
	cout << "Enter centimeters: ";
	cin >> (*ptr).centimeters;
	cout << "Length = " << (*ptr).meters << " meters " << (*ptr).centimeters << " centimeters";

	return 0;
}

出力:

構造体へのポインタ

コードのスクリーンショットは次のとおりです。

構造体へのポインタ

Code 説明:

  1. iostream ヘッダー ファイルの機能を使用するには、プログラムに iostream ヘッダー ファイルをインクルードします。
  2. プログラムに std 名前空間を含めると、そのクラスを呼び出さずに使用できます。
  3. Length という名前の構造体を作成します。
  4. 構造体の本体の開始長さ。
  5. 整数データ型の meter という名前の構造体メンバーを作成します。
  6. 整数型の centimeters という名前の構造体メンバーを作成します。
  7. 構造体の本体の終わりの長さ。
  8. main() 関数を呼び出します。
  9. main() 関数の本体の開始。
  10. Length 型のポインター変数 *ptr と通常の変数 l を作成します。
  11. 変数 l のアドレスを ポインタ変数.
  12. コンソールにメッセージを表示し、ユーザーに変数メーターの値を入力するよう求めます。
  13. ユーザーがキーボードから入力した値を読み取ります。 ここでは、ポインター変数を使用してメンバー関数のメートルにアクセスします。
  14. コンソールにメッセージを表示し、ユーザーに可変センチメートルの値を入力するよう求めます。
  15. ユーザーがキーボードから入力した値を読み取ります。 ここでは、ポインター変数を使用してメンバー関数 cm にアクセスします。
  16. ユーザーから読み取った値を他のテキストと一緒にコンソールに表示します。
  17. プログラムは、実行が成功すると値を返す必要があります。
  18. main() 関数の本体の終わり。

関数の引数としての構造体

構造体を引数として関数に渡すことができます。 これは、通常の引数を渡すのと同じ方法で行われます。 構造体変数を関数に渡すこともできます。 良い例は、構造体のメンバーの値を表示する必要がある場合です。 これを実証してみましょう:

例3:

#include<iostream>
using namespace std;

struct Person
{
	int citizenship;
	int age;
};

void func(struct Person p);

int main()
{
	struct Person p;

	p.citizenship = 1;
	p.age = 27;

	func(p);
	return 0;
}
void func(struct Person p)
{
	cout << " Person citizenship: " << p.citizenship<<endl;
	cout << " Person age: " << p.age;
}

出力:

関数の引数としての構造体

コードのスクリーンショットは次のとおりです。

関数の引数としての構造体

Code 説明:

  1. iostream ヘッダー ファイルをファイルに含めます。 次に、エラーが発生することなくその関数を使用します。
  2. クラスを使用するには、プログラムに std 名前空間を含めます。 クラスを使用するために名前空間を呼び出す必要はありません。
  3. Person という名前の構造体を作成します。
  4. 構造体 person の本体の開始部分。
  5. 構造体 Person のメンバーを作成します。 メンバーの名前は Citizenship で、型は整数です。
  6. 構造体 Person のメンバーを作成します。 メンバーの名前は age で、型は整数です。
  7. 構造体 Person の本体の終わり。
  8. struct Person p のインスタンスを引数として受け取る関数を作成します。
  9. main関数を呼び出します。 { は main() 関数の本体の始まりを示します。
  10. struct Person のインスタンスを作成し、それに p という名前を付けます。
  11. 構造体 p のインスタンスを使用して構造体メンバー変数 Citizenship にアクセスし、それに値 1 を割り当てます。
  12. 構造体のインスタンス p を使用して構造体のメンバー変数 age にアクセスし、それに値 27 を割り当てます。
  13. 関数を呼び出し、構造体 Person のインスタンス p を引数として渡します。
  14. 関数は、実行が成功すると値を返す必要があります。
  15. main() 関数の本体の終わり。
  16. 関数の本体を作成します。
  17. 関数の本体の始まり。
  18. 構造体メンバーの市民権値にアクセスし、他のテキストとともにコンソールに出力します。
  19. 構造体メンバーの年齢値にアクセスし、他のテキストとともにコンソールに出力します。
  20. 関数本体の終わり。

の制限 C++ 構造

構造の制限は次のとおりです。

  • struct データ型は、組み込みデータ型のように扱うことはできません。
  • Opera+ - などのトルは使用できません。 構造変数.
  • 構造体はデータの隠蔽をサポートしていません。 構造体のメンバーには、スコープに関係なく、任意の関数からアクセスできます。
  • 静的メンバーは構造体本体内で宣言できません。
  • コンストラクターは構造体内に作成できません。

よくあるご質問

In C++ 構造体とクラスはほぼ同じです。唯一の違いはデフォルトのアクセス権限です。構造体のメンバーはデフォルトでパブリックですが、クラスのメンバーはプライベートです。どちらもメンバー関数、コンストラクタ、継承をサポートしています。

AC構造体はデータのみを保持し、各変数宣言の前に構造体を記述する必要があります。 C++ struct には、メンバ関数、コンストラクタ、アクセス指定子を含めることもできます。また、変数を宣言する際には、struct キーワードは省略可能です。

構造体を宣言し、次にその構造体の配列を定義します。例えば、Person people[3] のように定義します。各要素は完全な構造体であり、people[0].age のようにメンバーにアクセスします。構造体の配列は、同じ型の複数のレコードをまとめて格納します。

ネストされた構造体とは、別の構造体の中にメンバーとして宣言された構造体のことです。これは、関連するサブデータをグループ化するもので、例えば、Employee 構造体の中に Date 構造体を配置するといったことが可能です。内部メンバーにアクセスするには、ドット演算子を連鎖させます。

サイズはおおよそメンバーの合計に、コンパイラがアライメントのために追加するパディングを加えたものなので、sizeof は実際の合計を超えることがあります。メンバー関数は何も追加しません。メンバーをサイズ順に並べることで、無駄なパディングを減らすことができます。

構造体へのポインタを保持する場合は、矢印演算子を使用してください。(*ptr).age の代わりに、ショートカット ptr->age を使用すると、同じメンバを読み取ることができます。ドット演算子はポインタではなく、直接インスタンスに対して機能します。

はい。AIコーディングアシスタントは、短いプロンプトやコメントを完全なコードに変換します。 C++ メンバー、コンストラクタ、フィールドアクセスを含む構造体。AIはプロジェクト固有の要件を見落とす可能性があるため、生成されたデータ型とアライメントを必ず確認してください。

Yes. GitHubコパイロット エディタに入力すると、構造体定義、メンバ変数、ドットや矢印によるアクセスなどが提案されます。繰り返し記述する定型コードの処理には優れていますが、コンパイル前に型、パディング、ロジックを必ず確認してください。