●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++では、同じ名前の関数や演算子でも、引数の違いによって複数定義することができます。 この仕組みを「オーバーロード(Overload)」と呼びます。

この記事では、関数オーバーロードと演算子オーバーロードについて、初心者向けにわかりやすく解説します。

オーバーロードとは?

オーバーロード(Overload)とは、「同じ名前」であっても、引数の数や型が異なれば別の処理として関数を定義できる仕組みです。 これにより、使う側から見た関数名は統一されていても、柔軟な呼び出しが可能になります。

関数のオーバーロードの例

#include <iostream>
using namespace std;

void print(int value) {
    cout << "整数: " << value << endl;
}

void print(double value) {
    cout << "小数: " << value << endl;
}

void print(string value) {
    cout << "文字列: " << value << endl;
}

int main() {
    print(10);          // 整数
    print(3.14);        // 小数
    print("こんにちは"); // 文字列
    return 0;
}

この例では、printという同じ関数名で、異なる型の引数を受け取れるように定義しています。 呼び出し時に自動で適切な関数が選ばれます。

関数オーバーロードの条件

  • 関数名が同じであること
  • 引数の型・個数・順番のいずれかが異なること
  • 戻り値の違いだけではオーバーロードできない

演算子のオーバーロードとは?

C++では、演算子(+, -, <, ==など)を独自のクラスに適用できるようにすることも可能です。 これを「演算子オーバーロード」と呼び、オブジェクト同士の加算や比較などが自然な形で記述できます。

演算子オーバーロードの例

#include <iostream>
using namespace std;

class Point {
public:
    int x, y;

    Point(int xVal, int yVal) {
        x = xVal;
        y = yVal;
    }

    // +演算子のオーバーロード
    Point operator+(const Point& other) {
        return Point(x + other.x, y + other.y);
    }

    void show() {
        cout << "(" << x << ", " << y << ")" << endl;
    }
};

int main() {
    Point p1(2, 3);
    Point p2(4, 1);
    Point p3 = p1 + p2;

    p3.show(); // (6, 4)
    return 0;
}

この例では、Pointクラスに対して+演算子を定義することで、オブジェクト同士の加算が自然な記述で行えます。

オーバーロードのメリット

  1. コードが読みやすくなる
    関数名を統一できるため、意味がわかりやすい。
  2. 同じ操作を異なるデータ型に適用できる
    柔軟で再利用性の高いコードが書ける。
  3. 演算子もオブジェクト向けに対応可能
    クラスの自然な操作が可能に。

注意点

  • 戻り値の違いだけではオーバーロードできません。
  • 可読性を意識しすぎて関数を増やしすぎないように注意。
  • 演算子オーバーロードは使いすぎると逆にわかりにくくなる場合もあります。

まとめ

C++のオーバーロードは、同じ関数名や演算子を柔軟に使い分けることを可能にする便利な機能です。 関数オーバーロードで多様な引数に対応したり、演算子オーバーロードでオブジェクト同士を直感的に操作できるようにすることで、コードの表現力が格段に向上します。

まずは関数オーバーロードから試してみて、慣れてきたら演算子オーバーロードにもチャレンジしてみましょう!

 

C++関連用語集

−−−−−  C++  −−−−−

C++のクラス(Class)とは?仕組みと使い方をわかりやすく解説!

C++のオブジェクト(Object)とは?クラスとの関係と役割をわかりやすく解説!

C++のコンストラクタ(Constructor)とは?役割と使い方をやさしく解説!

C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!

C++の継承(Inheritance)とは?クラスを拡張する基本テクニック

C++の多態性/ポリモーフィズム(Polymorphism)とは?オブジェクト指向の真髄を解説!

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++の仮想関数(Virtual Function)とは?ポリモーフィズムを実現する仕組みを解説!

C++の純粋仮想関数(Pure Virtual Function)とは?抽象クラスとの関係も解説!

C++の抽象クラス(Abstract Class)とは?使い方と役割をわかりやすく解説!

C++のテンプレート(Template)とは?型に依存しない汎用的な関数・クラスを作ろう!

C++の名前空間(Namespace)とは?名前の衝突を防ぐ便利な機能

C++の標準テンプレートライブラリ(STL)とは?効率的な開発に必須のライブラリ群

C++のベクター(vector)とは?配列より便利なSTLコンテナを使いこなそう!

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++の参照(Reference)とは?ポインタとの違いもわかりやすく解説!

C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++の例外処理(Exception Handling)とは?try/catch/throwでエラーに強いプログラムを作ろう

C++のtry/catch構文とは?例外処理の基本をやさしく解説!

C++のRAIIとは?リソース管理を自動化する重要な設計原則

C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++のスマートポインタ(Smart Pointer)とは?自動で安全なメモリ管理を実現しよう!

C++のコンパイル(Compile)とは?仕組みと流れをわかりやすく解説!

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方