質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1886閲覧

オーバーロードされている演算子をデフォルトの使い方をしたい

gari

総合スコア21

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/01/17 10:15

編集2017/01/17 10:58

C++を勉強中のものです。

C++11での比較演算子のオーバーロードについての質問です。
内容としては、
・私の演算子のオーバーロードの認識が間違っていないかの確認
・オーバーロードのスコープ内でオーバーロードしない比較演算子の使い方
を知りたいです。

まず私の認識ですが、

C++

1//ファイル1 2 3bool operator >( const aaa& b ) { //>演算子をオーバーロード 4..... //処理 5return; 6} 7a > b //①

C++

1///ファイル3 ファイル1をincludeしない 2if(a > b) { //② 3 return bool; 4}

C++

1//ファイル2 2#include "ファイル1" 3if(int c > int d)//③

演算子のオーバーロードをすると①と②が同じ処理になるという認識です。

オーバーロードのスコープ内でオーバーロードしない方法ですが、

比較演算子(>、<)のオーバーロードされているスコープ内で
普通の③の処理を行いたいです。

私の演算子のオーバーロードの理解が浅いための質問だということはわかっております。
どなたかご教示願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CerealRusk

2017/01/17 10:41 編集

全てで1つのブロックとして捉えるべきなのか3つ、4つは別な部分を表しているのか(特に①がくっついているので連続でない場合は分けてほしいです)。 と、「if(enum c > int d)」の書き方は出来ないと思いますが、その型が来た場合という疑似コードでしょうか。
guest

回答2

0

ベストアンサー

A. そんな方法はない

演算子のオーバーロードが許容されているのは、その作用素のうち少なくとも1個が非組込型の場合のみです。組込型だけの演算の再定義はできません。
そして、非組込型の演算は、基本的に最初は定義されていません。なのでオーバーロードしていない状況ではそもそもコンパイルできません。オーバーロードすることで、はじめて演算子が使えるようになります。
非組込型の(再定義可能な)演算のうち、唯一最初から定義されている演算は、代入です。これはクラス定義の中でのみ、オーバーロード可能です。グローバルでは定義不可能です。

したがって、どのような状況でも、演算子のオーバーロードをする、しないの選択はできません。

投稿2017/01/17 16:11

majiponi

総合スコア1720

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

majiponi

2017/01/27 05:02

なるほど、テンプレートの選択ですか、その発想はなかった…。勉強になりました。
guest

0

こんにちは。

・私の演算子のオーバーロードの認識が間違っていないかの確認
演算子のオーバーロードをすると①と②が同じ処理になるという認識です。

①は;が無いですが、仮にあったとします。①の処理はオーバーロードされていてもいなくても、実行中の関数からreturnしません。それに対して②の処理はオーバーロードされていてもいなくても、a < bがtrueになると実行中の関数からreturnします。
すなわち、オーバーロードの有無に関係なく、①と②の処理が同じになることはありません。

・オーバーロードのスコープ内でオーバーロードしない比較演算子の使い方

一般的にそれができる方法はありません。
特定の状況ならできるかも知れませんが、それが必要になる場面を想像できません。


【蛇足ですが】
ソースがむちゃくちゃです。コンパイルできるようにして走らせてみると理解が捗りますし、質問が具体的になるので回答も付きやすくなりますよ。

投稿2017/01/17 10:57

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gari

2017/01/17 17:05

回答ありがとうございます。 ソースコードについてですが、申し訳ありません。その通りです。。。 今後はコンパイルできるコードを載せるようにしたいと思います。 演算子のオーバーロードについて根本的な理解が間違っていることがわかりました。 ありがとうございます。 精進したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問