【C++】クラスの定義とメンバ関数の実装方法を解説

目次

はじめに

C++のオブジェクト指向プログラミングの核となるのが「クラス (class)」です。クラスは、関連するデータ(メンバ変数)と、それらを操作するための一連の関数(メンバ関数)を一つにまとめた、独自のデータ型の「設計図」です。

この記事では、C++におけるクラスの基本的な定義方法と、クラスに属するメンバ関数の処理内容を記述(実装)する2つの主要な方法について、分かりやすく解説します。


クラスの基本的な定義

クラスを定義するには、class キーワードに続けて、任意のクラス名を指定し、ブロック {} の中にメンバを記述します。

// 「商品」クラスの定義
class Product {
public: // 外部からアクセス可能にする
    // メンバ変数
    int id;
    std::string name;
    
    // メンバ関数のプロトタイプ宣言
    void display();
};

解説:

  • class Product { ... };: Product という名前の新しいクラス型を定義しています。構造体と同様に、最後のセミコロン ; を忘れないようにしましょう。
  • public:: アクセス指定子と呼びます。public: と書くことで、これ以降に宣言されたメンバが、クラスの外部からアクセス可能になります。
  • void display();: これはメンバ関数の「プロトタイプ宣言」です。ここでは「display という名前で、引数を取らず、何も値を返さない関数がありますよ」という宣言だけを行い、具体的な処理内容は後で記述します。

メンバ関数の実装方法

方法1: クラスの外で実装する(一般的)

メンバ関数の具体的な処理内容は、クラス定義のブロックの外側に記述するのが一般的です。その際、どのクラスに所属する関数なのかを明示するために、スコープ解決演算子 :: を使います。

サンプルコード

#include <iostream>
#include <string>

using namespace std;

// --- クラスの定義 ---
class Product {
public:
    int id;
    string name;
    
    // メンバ関数のプロトタイプ宣言
    void display();
};

// --- メンバ関数の実装 ---
// Productクラスに所属するdisplay関数であることを :: で示す
void Product::display() {
    cout << "商品ID: " << id << endl;
    cout << "商品名: " << name << endl;
}

int main() {
    Product item1;
    item1.id = 101;
    item1.name = "高機能マウス";
    
    // メンバ関数を呼び出す
    item1.display();
    
    return 0;
}

解説:

  • void Product::display(): 関数名 (display) の前に クラス名:: (Product::) を付けることで、「これは Product クラスの display 関数です」とコンパイラに伝えています。
  • ヘッダーファイルとソースファイル: 実際の開発では、クラスの定義(プロトタイプ宣言まで)をヘッダーファイル.h.hpp)に、メンバ関数の実装をソースファイル.cpp)に分割して記述するのが一般的です。これにより、コードの管理がしやすくなります。

方法2: クラスの中で実装する(インライン関数)

処理内容が非常に短いメンバ関数に限り、クラス定義のブロックの中で直接、処理を実装することもできます。このように実装された関数は「インライン関数」として扱われます。

サンプルコード

#include <iostream>
#include <string>

using namespace std;

// クラス定義の中でメンバ関数を実装
class Product {
public:
    int id;
    string name;
    
    // display関数をインラインで実装
    void display() {
        cout << "商品ID: " << id << endl;
        cout << "商品名: " << name << endl;
    }
};

int main() {
    Product item1;
    item1.id = 101;
    item1.name = "高機能マウス";
    item1.display();
    return 0;
}

解説: インライン関数は、呼び出しのオーバーヘッドが少なくなるため、パフォーマンスがわずかに向上する可能性があります。しかし、クラス定義が長くなり可読性が落ちるため、ごく短いゲッター/セッターのような関数に限定して使うのが良いでしょう。


まとめ

今回は、C++のクラス定義と、メンバ関数の2つの実装方法について解説しました。

  • クラス (class) は、メンバ変数メンバ関数を一つにまとめた設計図。
  • メンバ関数は、プロトタイプ宣言をクラス定義内で行い、実装をクラスの外 (クラス名::関数名) に記述するのが一般的。
  • 短い関数であれば、クラス定義内で直接実装するインライン関数も利用できる。

クラスの定義と実装を分離するスタイルは、オブジェクト指向プログラミングにおけるコードの構造化の基本です。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次