C++の”クラス”の基本

IT

業務で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++のクラスの書き方を勉強しましたとさ。
これで、明日の業務スムーズにいきそうだぁ~

間違い等ございましたら、教えてください。お願いします!

コメント

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