業務でC++を触っていますが、いっつもAIに聞いてばかりで、言語特有の書き方など
全く理解していない当人が久しぶりに、ちょっとちゃんと言語の勉強をしました。
この記事は、オブジェクト指向における”クラス”が、
何を意味しているかがわかることを前提としています
オブジェクト指向ってなんやねん!美味しいんかそれ!?という方は、
是非AIに聞いてみてください!マジで、それがベストです
C++の基本のクラスの書き方
#include <iostream>
#include <string>
// クラスの定義(設計図)
class Player {
public: // どこからでもアクセスできるようにする
// メンバ変数(属性)
std::string name;
int hp;
// メンバ関数(振る舞い)
void attack() {
std::cout << name << " の攻撃! 敵にダメージを与えた!" << std::endl;
}
};
int main() {
// クラスからオブジェクト(実体)を作成
Player hero;
// データを代入
hero.name = "勇者ロト";
hero.hp = 100;
// 関数を呼び出す
hero.attack(); // 出力: 勇者ロト の攻撃! 敵にダメージを与えた!
return 0;
}
私は一番最初、Javaから勉強をはじめたので、クラスの書き方が全然違って驚きでした!
まぁ、クラスで実現したいことは変わらないけど笑
クラスとmain関数を別ファイルで定義するには?
結論:3ファイルに分ける!
1. Player.h (ヘッダファイル)
// Player.h
#ifndef PLAYER_H // インクルードガード(二重に読み込まれるのを防ぐおまじない)
#define PLAYER_H
#include <string>
class Player {
private:
std::string name;
int hp;
public:
// コンストラクタの宣言
Player(std::string newName, int newHp);
// メンバ関数の宣言
void attack();
};
#endif
2.Player.cpp (ソースファイル)
// Player.cpp
#include "Player.h" // 自分がどのヘッダの実装なのかを教える
#include <iostream>
// コンストラクタの具体的な処理
Player::Player(std::string newName, int newHp) {
name = newName;
hp = newHp;
}
// attack関数の具体的な処理
void Player::attack() {
std::cout << name << " の攻撃! 敵にダメージを与えた!" << std::endl;
}
3.3. main.cpp (メイン関数があるファイル)
// main.cpp
#include <iostream>
#include "Player.h" // 作成したクラスのヘッダを読み込む
int main() {
// 別ファイルで定義したPlayerクラスを使用できる
Player hero("勇者ロト", 100);
hero.attack();
return 0;
}
なるほどなるほど。ヘッダファイルにクラスの骨子だけ書いて、
実装内容を別ファイル(Player.cpp)に書くのだね。
そして、メイン関数でのコンストラクタと関数の呼び出し方は、Javaと変わらない!
私的Q&A
疑問:Player::の”::”って何だ???

私のうろ覚え記憶で行くと、”::”は、名前空間の後につくとか何とか。。。
Playerクラスって名前空間なの???
回答:”::"(スコープ解決演算子)は大きく分けて2つの「身分証明」に使われる
①【フォルダ名 :: 中身】
画面に出力する機能や、文字列(std::string)などのC++標準機能は、すべて std(Standardの略)という名前の巨大なフォルダ(名前空間) の中にまとめて保管されています。 「std フォルダの中にある cout というオブジェクトを使います」という意味で std::cout と書きます。
②【クラス名 :: 関数名】(前回のケース)
「Player という設計図に属している attack 関数の中身を書きます」という、クラスの所属を示すために使います。
と、Gemini先生が教えてくれました。わかりやすい!!
というわけで、今日はC++のクラスの書き方を勉強しましたとさ。
これで、明日の業務スムーズにいきそうだぁ~
間違い等ございましたら、教えてください。お願いします!




コメント