算術演算子と比較演算子
ベストプラクティスに従って、+、-、*、/、==、<などの演算子と関連演算子をオーバーロードします。
「算術演算子と比較演算子」は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フィードバックを取得できます。ローカル設定は不要です。