はじめに
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
まとめ
構造体を活用して、より効率的で分かりやすいC++のプログラムを書いてみましょう!