タグ

クラスに関するamagasa99のブックマーク (2)

  • 共変戻り値と反変引数 - Qiita

    C#を学習すると共変と反変という用語がでてきます。難しそうな用語ですが、その取っ掛かりとして戻り値と引数に的を絞って図によるイメージで説明します。数学的な知識は前提としませんし、コードも簡単なものしか出て来ません。型周りの知識を整理するのにも役立つでしょう。 この記事で最終的に説明したいことは、次のようにデリゲートから参照するメソッドの戻り値や引数の型を変える規則についてです。 C Foo(A a) { return new C(); } // 戻り値はBの派生クラスC、引数はBの基底クラスA delegate B Delg(B b); // 戻り値と引数ともにB Delg d = Foo; // 型が一致しないのに、なぜ許されるのか? この規則はイメージしにくく混乱を招きがちですが、図による直感的な説明を試みます。 ※ 具体例で用語に慣れることも目的としています。なるべく話を単純にするた

    共変戻り値と反変引数 - Qiita
  • C++クラスの書き方が面倒くさい訳 - すたんだーどっ☆あいおーっ!

    Cが全然分からないころの話。 javaのように1クラス1ファイルに書かないのはなんで? メンバがポインタばっかりなのはなんで? という疑問を持ちながらコーディングしてるともやもやして嫌でした。 もやもやがいやなのでjava風に書いていたら当然のように詰まりました。 ポインタじゃなかったらメモリが大変なことになるだろうが! というのは最もなんですけど、じゃ小さいプログラムならありなのか?スマートポインタ使えばいいのか?と言うとそうでもない。 今日書いてみたいのは、クラスは相互参照がめんどくせぇから分割しろ。そして同じ理由でメンバ変数はポインタにしとこうぜ、というお話。 相互参照の解決 AクラスがBクラスを使って、BクラスがAクラスを使う。 こういう状態を相互参照とか相互includeとか言うと思う。 javaは何でもないことだけど、C++はこれを簡単には許してくれない。 相互参照の解決方法に

    C++クラスの書き方が面倒くさい訳 - すたんだーどっ☆あいおーっ!
  • 1