構造体の基本とコンストラクタの使い方を徹底解説!

c++
スポンサーリンク

はじめに

C++の「構造体(struct)」は、複数の異なるデータ型をまとめて扱うための便利な機能です。本記事では、構造体の基本からメンバ関数、コンストラクタまでを詳しく解説し、実践的なサンプルコードを交えて学習します。

構造体とは?

構造体を使うことで、複数のデータ型を1つの新しい型としてまとめることができます。

構造体の基本構文

struct 構造体名 {
  型1 メンバ変数名1;
  型2 メンバ変数名2;
  型3 メンバ変数名3;
  // 必要なメンバ変数を追加
};  // ← セミコロンが必要

例:異なる型をまとめる

#include <bits/stdc++.h>
using namespace std;

struct MyPair { int x; // 整数型のデータ string y; // 文字列型のデータ };

int main() { MyPair p = {12345, "hello"}; // MyPair型のオブジェクトを宣言 cout << "p.x = " << p.x << endl; cout << "p.y = " << p.y << endl; }

出力結果

p.x = 12345
p.y = hello

メンバ関数

構造体に「メンバ関数」を追加すると、構造体に関連する処理をカプセル化できます。

メンバ関数の定義

struct MyPair {
  int x;
  string y;
  // メンバ関数
  void print() {
    cout << "x = " << x << endl;
    cout << "y = " << y << endl;
  }
};

メンバ関数の使用

int main() {
  MyPair p = {12345, "Hello"};
  p.print();  // メンバ関数の呼び出し
  MyPair q = {67890, "APG4b"};
  q.print();  // 別のオブジェクトでメンバ関数を呼び出し
}

出力結果

x = 12345
y = Hello
x = 67890
y = APG4b

コンストラクタ

構造体のオブジェクトが作成されるときに、自動的に実行される特別な関数を「コンストラクタ」といいます。

コンストラクタの基本形

struct 構造体名 {
  // コンストラクタ
  構造体名() {
    // 初期化処理
  }
};

コンストラクタの使用例

#include <bits/stdc++.h>
using namespace std;

struct MyPair { int x; string y;

// コンストラクタ MyPair() { cout << "constructor called" << endl; } };

int main() { MyPair p; // オブジェクト生成時にコンストラクタが呼ばれる p.x = 12345; p.y = "hello"; cout << "p.x = " << p.x << endl; cout << "p.y = " << p.y << endl; }

出力結果

constructor called
p.x = 12345
p.y = hello

引数を持つコンストラクタ

コンストラクタに引数を渡すことで、オブジェクトの初期化をより柔軟に行えます。

#include <bits/stdc++.h>
using namespace std;

struct NumString { int length; string s;

// コンストラクタ NumString(int num) { cout << "constructor called" << endl; s = to_string(num); // 数値を文字列に変換 length = s.size(); } };

int main() { NumString num(12345); // 12345を渡す cout << "num.s = " << num.s << endl; cout << "num.length = " << num.length << endl; }

出力結果

constructor called
num.s = 12345
num.length = 5

まとめ

  • 構造体は異なるデータ型を1つにまとめることができる。
  • メンバ関数を定義すると、オブジェクトに紐づいた処理が可能。
  • コンストラクタを使うと、オブジェクトの初期化が簡単になる。
  • 引数を持つコンストラクタを利用すると、柔軟な初期化が可能。
  • 構造体を活用して、より効率的で分かりやすいC++のプログラムを書いてみましょう!

    タイトルとURLをコピーしました