インクリメント演算子をオーバーロードして、後置きインクリメントの場合に戻り値が演算前の結果を返すようにする方法はありませんか?
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#で別のFormへ複数の値を返そ...
-
Junitテストでvoid戻り値メッソ...
-
落下する正方形を左右に移動す...
-
ボタンの複数割り当てについて
-
JavaFXでの表内のチェックボッ...
-
GetDIBits関数の使い方について
-
java アプリケーションをjava ...
-
C# 矢印キーの取得
-
大量のデータを読み込んで表示...
-
JSPやサーブレットでSystem.out...
-
パソコンキーボードで時分秒を...
-
javaで質問です。 文字列2023/2...
-
Path型をString型へ変換する(Java)
-
変数を動的に利用するには?
-
VBAで配列の計算
-
C言語32bitから64bitの移行につ...
-
System.err. printlnとSystem.o...
-
「配列定数は、イニシャライザ...
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
C#でのWNetAddConnection3の使...
-
Junitテストでvoid戻り値メッソ...
-
ボタンの複数割り当てについて
-
C# DataGridView列カスタマイズ
-
C# WinForm のDataGridView Cel...
-
C# visibleプロパティをfalseに...
-
[C#.net]スレッド化された別フ...
-
C# 矢印キーの取得
-
unityでのC++エラーの原因がわ...
-
C#から、C++で作成したdll内の...
-
コンボボックスを使う時の警告
-
JavaFXでの表内のチェックボッ...
-
C#で別のFormへ複数の値を返そ...
-
vc++ 2005 Pictureboxの透過処理
-
プログラミング(Java)じゃん...
-
C#でキーイベントが発生しない...
-
正規表現
-
C# MouseHoverを何度も呼ぶには
おすすめ情報