インクリメント演算子をオーバーロードして、後置きインクリメントの場合に戻り値が演算前の結果を返すようにする方法はありませんか?
class Sample
{
public int x;
public int y;
public Sample(int x, int y)
{
this.x = x;
this.y = y;
}
public override string ToString()
{
return base.ToString() + " - x = " + x + ", y = " + y;
}
public static Sample operator ++()
{
x++; y++;
return this;
}
}
class EntryPoint
{
public static void Main()
{
Sample sample = new Sample(1, 2);
// 「Sample - x = 2, y = 3」で、期待通り
Console.WriteLine(++sample);
// 「Sample - x = 3, y = 4」で、期待したのはインクリメントされる前の値である「「Sample - x = 2, y = 3」
Console.WriteLine(sample++);
}
}
No.1ベストアンサー
- 回答日時:
参考サイトによるとこんな感じで出来る様です。
public static Sample operator ++( Sample smpl )
{
Sample tmp = new Sample( smpl.x + 1, smpl.y + 1 );
return tmp;
}
参考URL:http://ufcpp.net/study/csharp/oo_operator.html#o …
ありがとうございます。
新しいインスタンスを作成して、それをreturnすれば、呼び出し元の変数に、暗黙のうちにreturnされたインスタンスが代入されるみたいですね。
yamada404さんのメソッドに書き換えたとすると、
Sample sample = new Sample(1, 2);
Sample s_const = sample;
sample++; // sample変数には、new Sample(2, 3)のインスタンスが代入される
// s_constには、最初に作成されたインスタンスのまま
インスタンス自体に対して演算しているわけではないことを頭に入れておかないと、とんでもないミスプログラムを書いてしまいそうです。
ちなみに、最初に質問した時のプログラムは、operator ++メソッドが引数がなくて、コンパイルできませんでした。ごめんなさい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- UNIX・Linux bashの変数でブランクがあるかチェックする方法教えて下さい。 3 2023/04/06 16:09
- Visual Basic(VBA) 標準モジュール Public mOnTime As Date Sub sample() '実行プロシ 1 2023/02/22 15:44
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エンターキーを押すとOKボタン...
-
ペイントソフトを作っているの...
-
GetDIBits関数の使い方について
-
C#で、あるクラスのメンバーす...
-
C#から、C++で作成したdll内の...
-
マルチスレッドプログラムから...
-
大量のデータを読み込んで表示...
-
JButtonの画像をactionPerforme...
-
C#で別のFormへ複数の値を返そ...
-
Junitテストでvoid戻り値メッソ...
-
C# LISTBOXの複数項目取得
-
C# visibleプロパティをfalseに...
-
struts2のchainで値の受け渡し...
-
Javaの課題について質問です。...
-
パスがとおらない・・・
-
unityでのC++エラーの原因がわ...
-
Log4jで機能毎に別ファイルへ出...
-
flush()とclose()について
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
ボタンの複数割り当てについて
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# 矢印キーの取得
-
Thread.sleepのInterruptedExce...
-
unityでのC++エラーの原因がわ...
-
C#で別のFormへ複数の値を返そ...
-
C# visibleプロパティをfalseに...
-
エンターキーを押すとOKボタン...
-
Processingでマウスクリックで...
-
[C#.net]スレッド化された別フ...
-
C#でキーイベントが発生しない...
-
C# DataGridView列カスタマイズ
-
【C#】ソースコードをファイル...
-
LVM_SETITEMSTATEでListViewの...
-
GetDIBits関数の使い方について
-
未割り当てのローカル変数
-
C# MouseHoverを何度も呼ぶには
おすすめ情報