0Pricing
C++ Academy · レッスン

算術演算子と比較演算子

ベストプラクティスに従って、+、-、*、/、==、<などの演算子と関連演算子をオーバーロードします。

「算術演算子と比較演算子」はCoddyKit上の無料C++ Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC++ Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C++ Academyコースには全4レッスンが含まれています。

演算子をオーバーロードする理由

演算子のオーバーロードを使うと、独自の型を組み込み型のように扱えます。v1 + v2 は v1.add(v2) より読みやすくなります。ベクトル、複素数、金額などの値型に使用してください。

operator+ の定義

+ はメンバー関数または非メンバー関数としてオーバーロードできます。非メンバー関数のほうが、より対称的です。

struct Vec2 {
    double x, y;
    Vec2 operator+(const Vec2& other) const {
        return {x + other.x, y + other.y};
    }
};

非メンバー関数の形式

非メンバー関数では、両方のオペランドを同じ立場で扱えます。どちら側にも変換が適用される可能性がある場合に便利です。

Vec2 operator+(const Vec2& a, const Vec2& b) {
    return {a.x + b.x, a.y + b.y};
}

複合代入演算子

まず += を実装し、その上に + を構築してください。これが標準的なイディオムです。

Vec2& operator+=(const Vec2& other) {
    x += other.x;
    y += other.y;
    return *this;
}

Vec2 operator+(Vec2 lhs, const Vec2& rhs) {
    lhs += rhs;
    return lhs;
}

単項演算子

単項演算子には、-x、+x、!x、~x、++x、--x などがあります。

Vec2 operator-() const { return {-x, -y}; }

前置インクリメントと後置インクリメント

前置形式はパラメーターを取りません。後置形式は、区別するためにダミーの int を取ります。

Counter& operator++();        // prefix
Counter  operator++(int);     // postfix

比較演算子

比較演算子は bool を返します。一貫性の点では、非メンバー関数が最適です。

bool operator==(const Vec2& a, const Vec2& b) {
    return a.x == b.x && a.y == b.y;
}
bool operator!=(const Vec2& a, const Vec2& b) { return !(a == b); }

順序付けのための Less Than

型をソートしたり、map のキーとして使用したりする必要がある場合は、operator< を定義してください。他の関係演算子は、これを基に定義できます。

対称な異種型演算子

3 + vec と vec + 3 の両方をサポートするには、両方を定義するか、変換を行う非メンバー関数を使用してください。

予期しない動作を避ける

オーバーロードした演算子は直感的に動作する必要があります。+ の意味を減算に再定義してはいけません。演算子に従来からある数学的な意味を守ってください。

オーバーロードできない演算子

使用できない演算子もあります:

  • ?: — 三項演算子
  • . — メンバーアクセス(ただし、->はオーバーロードできます)
  • :: — スコープ解決
  • sizeof、alignof、typeid

簡単な確認

ユーザー定義型のoperator+で、標準的な実装パターンは何ですか?

まとめ

演算子のオーバーロードを使うと、ユーザー定義型を組み込み型のように扱えます。まず複合代入演算子を実装し、その後で通常の算術演算子を実装します。比較演算子は非メンバー関数として定義するのが最適です。慣例的な意味に従ってください。予想外の動作はバグです。

よくある質問

「算術演算子と比較演算子」レッスンは無料ですか?

はい。「算術演算子と比較演算子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C++ Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C++ Academyコースには全4レッスンが含まれています。

「算術演算子と比較演算子」で何を学びますか?

ベストプラクティスに従って、+、-、*、/、==、<などの演算子と関連演算子をオーバーロードします。 ブラウザで直接実行するハンズオンコードでC++ Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C++ Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC++ Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「算術演算子と比較演算子」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC++ Academyレッスンでコードを書いて実行できますか?

はい。すべてのC++ Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 算術演算子と比較演算子
  2. ストリーム挿入演算子と抽出演算子
  3. 添字演算子と関数呼び出し演算子
  4. 三方比較演算子(C++20)
← C++ Academyに戻る