C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++における単項演算子のオーバーロードとは?基本と実装例をわかりやすく解説

単項演算子(unary operator)とは、1つのオペランドに対してのみ作用する演算子のことです。C++では演算子オーバーロードの機能を使うことで、クラスなどのユーザー定義型に対して、これらの演算子の動作を自由にカスタマイズできます。コンパイラは、オペランドの型を調べることによって、演算子が持つ複数の意味を適切に区別します。

単項演算子の種類

C++でよく使われる単項演算子には、以下のようなものがあります。

  • インクリメント演算子(++)とデクリメント演算子(--)
  • 単項マイナス演算子(-)
  • 論理NOT演算子(!)

単項演算子は、呼び出し元のオブジェクトそのものに対して作用します。通常、これらの演算子はオブジェクトの左側に置かれます(例:!obj-obj++obj)。ただし、obj++obj-- のように、後置(ポストフィックス)形式で使用できる場合もあります。

以下の例では、前置(プレフィックス)形式で使用する「!」演算子をオーバーロードする方法を紹介します。

サンプルコード

#include <iostream>
using namespace std;

class Distance {
    private:
    int feet;      // フィート(0以上)
    int inches;    // インチ(0〜12)
    public:

    // コンストラクタ
    Distance(int f, int i) {
        feet = f;
        inches = i;
    }
    // 距離を表示するメソッド
    void display() {
        cout << "F: " << feet << " I:" << inches << endl;
    }
    // 「!」演算子のオーバーロード
    Distance operator!() {
        feet = -feet;
        inches = -inches;
        return Distance(feet, inches);
    }
};

int main() {
    Distance D1(3, 4), D2(-1, 10);
    !D1;                 // 符号を反転
    D1.display();        // D1を表示
    !D2;                 // 符号を反転
    D2.display();        // D2を表示
    return 0;
}

実行結果

このプログラムを実行すると、次のような出力が得られます。

F: -3 I:-4
F: 1 I:-10

コードの解説

この例では、フィート(feet)とインチ(inches)で距離を表す Distance クラスを定義し、operator!() メンバ関数として「!」演算子をオーバーロードしています。この演算子が呼ばれると、オブジェクトが保持する feetinches の両方の符号が反転され、その結果を持つ新しい Distance オブジェクトが返されます。

実行結果を見ると、初期値が (3, 4) だった D1(-3, -4) に、初期値が (-1, 10) だった D2(1, -10) に符号が反転していることがわかります。このように、単項演算子をオーバーロードすることで、クラスのオブジェクトに対して組み込み型のように直感的な操作を実装できます。

  1. C++のsizeof演算子とは?基本構文と使い方を実例付きで解説

    sizeof はC++のキーワードであると同時に、コンパイル時に評価される演算子でもあります。変数やデータ型が必要とするメモリのサイズをバイト単位で取得するために使用され、プログラムの実行時ではなくコンパイルの時点でその値が確定する点が特徴です。sizeof演算子は、int や double などの組み込み型だけでなく、クラス・構造体・共用体などユーザー定義のデータ型に対しても使用できます。sizeofの基本構文sizeof (data type)「data type」の部分には、サイズを調べたいデータ型や変数名を指定します。例えば、char 型のオブジェクトに適用した場合は必ず 1 を返しま

  2. C++の単項演算子とは?種類・使い方を実例付きで解説

    単項演算子(unary operator)とは、1つのオペランド(被演算子)に対して作用し、新しい値を生成する演算子のことです。C++には以下のような単項演算子が用意されています。 C++の主な単項演算子一覧 演算子説明 間接参照演算子(*)ポインタ変数に作用し、そのポインタが指すアドレスにある値に相当するlvalueを返します。この操作はポインタの「デリファレンス(間接参照)」と呼ばれます。 アドレス取得演算子(&)オペランドのメモリアドレスを取得する単項演算子です。オペランドとしては、関数指定子、またはビットフィールドでなく、register記憶クラス指定子を付けずに宣言さ