構造体
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/11/02 18:42 UTC 版)
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。2011年11月) ( |
C/C++やC#などでstructとしてサポートされているほか、Visual Basic/VBAのユーザー定義型Type[1]や、PascalやAdaのrecord型も構造体に相当する。
クラスベースのオブジェクト指向言語では、抽象データ型としてのクラスが構造体の役割をも内包する。Cの文法を継承した言語ではstruct
キーワードを含むこともあるが、言語によってその役割や性質は異なる。
- C++の
struct
は、アクセシビリティの初期値がpublic
であることを除いて、class
と同等の機能を果たす。メンバー変数だけでなくメンバー関数を持つこともでき、派生型を定義することもできる。 - Javaでは、
struct
キーワードは存在しない。すべてのユーザー定義型は参照型であり、構造体に相当するデータ構造はclass
キーワードを使ってクラスとして実現する必要がある。Java 16ではイミュータブルな「レコードクラス」をサポートする[2][3]。 - Kotlinでは、データを保持するためだけのクラスとして、
data class
構文により「データクラス」を定義することができる[4]。データクラスはミュータブル[注釈 1]だが、通常のクラス同様に参照型であることには変わりなく、変数の代入は参照のみのコピーとなる。そのため、すべてのプロパティをコピーした新たなオブジェクトを生成するには、コンパイラの推論によって暗黙的に自動定義されたcopy()
関数を使うなどする。サブクラスを定義することはできない。 - C#では、構造体の定義に
struct
キーワードを使用する[5]。class
キーワードにより定義されるクラス[6]は「参照型」である一方、構造体は軽量なオブジェクト型を定義するための「値型」であり、クラスと比較していくつかの制約がある。 - VB.NETでは、構造体の定義に
Structure
キーワードを使用する[7]。姉妹言語であるC#の構造体と類似の機能である。 - Swiftでは、構造体の定義に
struct
キーワードを使用する。C#と同様、class
キーワードにより定義されるクラスは参照型である一方、構造体は値型である[8][9]。SwiftのクラスはObjective-Cのクラスに対応する概念であり相互運用できるが、構造体は相互運用することができない。
オブジェクト指向言語でないCなどでオブジェクト指向プログラミングを模倣するために構造体を使うこともある。
注釈
- ^ データクラスのすべてのプロパティを
val
で宣言することで、イミュータブルにすることもできる。
出典
- ^ User-defined data type (VBA) | Microsoft Docs
- ^ レコード・クラス | Oracle Java SE 16 Help Center
- ^ Java 16の最新情報 | InfoQ
- ^ データクラス - Kotlin Programming Language
- ^ a b 構造体型 - C# リファレンス | Microsoft Docs
- ^ a b クラス - C# プログラミング ガイド | Microsoft Docs
- ^ a b Structure ステートメント - Visual Basic | Microsoft Docs
- ^ 構造体とクラス(Structures and Classes) · The Swift Programming Language日本語版
- ^ Structures and Classes — The Swift Programming Language (Swift 5.6)
- ^ OpenCL-Headers/cl.h at master · KhronosGroup/OpenCL-Headers
- ^ Vulkan-Headers/vulkan_core.h at master · KhronosGroup/Vulkan-Headers
- ^ Choosing Between Class and Struct - Framework Design Guidelines | Microsoft Docs
- ^ Parameterless struct constructors - C# 10.0 draft specifications | Microsoft Learn
- ^ Structures - F# | Microsoft Docs
- ^ ref class and ref struct (C++/CLI and C++/CX) | Microsoft Docs
- ^ StructLayoutAttribute Class (System.Runtime.InteropServices) | Microsoft Docs
- ^ Storage and Alignment of Structures | Microsoft Docs
構造体と同じ種類の言葉
固有名詞の分類
- 構造体のページへのリンク