struct。 メンバのアクセス指定子がデフォルトで public であるクラス型(C++)

C++では、構造体もクラスの一種であり、データメンバだけでなくメンバ関数コンストラクタ(C++)アクセス指定子なども持てる。

定義

struct Employee
{
    int id {};
    int age {};
    double wage {};
};

各メンバには、デフォルトメンバ初期化子を書いて初期値を設定できる。

オブジェクトの作成

Employee e1 {};
Employee e2 { 1, 32, 60000.0 };

構造体が集成体である場合は、{} を使って各メンバを順番に初期化できる。

メンバアクセス

オブジェクトのメンバには . でアクセスする。

Employee e {};
e.id = 14;

#include <iostream>
 
struct Employee
{
    int id {};
    int age {};
    double wage {};
};
 
int main()
{
    Employee joe { 14, 32, 60000.0 };
    Employee frank { 15, 28, 45000.0 };
 
    int totalAge { joe.age + frank.age };
    std::cout << "Joe and Frank have lived " << totalAge << " total years\n";
 
    if (joe.wage > frank.wage)
        std::cout << "Joe makes more than Frank\n";
    else if (joe.wage < frank.wage)
        std::cout << "Joe makes less than Frank\n";
    else
        std::cout << "Joe and Frank make the same amount\n";
}

補足

  • 単純なデータの集まりを表すときに struct がよく使われる
  • 振る舞いを強く隠蔽したい設計では class が選ばれることが多い
  • ただし、これは主に慣習の違いであり、機能差は小さい
  • class との違いの詳細は クラスと構造体の違い(C++) を参照

関連

参考