2018-02-27

C++のいらない文法

多重継承

多重継承がなくてもどんなに複雑なプログラムでも記述できる。

JavaphpインターフェイスRubyMix-inがある。

演算子オーバーロード

+ や - などの演算子に別の動作を与える演算子オーバーロードはなくてもプログラム記述はまったく困らない。

C言語

a = b + c;

と書いた場合解釈は足し算しかない。c + b と書いても同じ。

C++

a = b + c;

と書いた場合、b と c が何かでまったく動作が変わる。逆にして c + b は動作が違う可能性がある。つまりこの行だけ見てもどのような動作になるのか予測できない。

Java はできない

PHP はできない

Python はできる

Ruby はできる

フレンド関数

クラス保護メンバー変数に、アクセスできる関数のこと。通常、privateメンバ変数クラスからアクセスできないが、フレンド関数はそのprivateな変数アクセスできる。

不要例外的文法

  • どういうふうに動作が変わるの?

  • 互換性のために過去の機能を切りづらいのと 歴史的に熟考がまだ足りていなかった頃に設計されてしまったのと それら積み重ねで罠の多い言語になってしまったけど、 どこかで、モダ...

  • 多重継承も演算子オーバーロードもフレンド関数も、それが便利で効率的だから考案されたのでしょ? 多重継承ができれば、少ないコード数でプログラムが作れるとか、 演算子オーバ...

  • 演算子の多重定義のないJava BigDecimal result = new BigDecimal("100000").multiply(new BigDecimal("99999.55")).add(new BigDecimal("3333333333")); 多重定義のあるC++ BigDecimal result = BigDecimal("100000") * "99999.55" / "3333333333";

    • Javaの方が分かりやすい!

      • プログラムは文書的に書いたほうがわかりやすいと思う人がいて、昔から試されてきたけどはやらないね。COBOLとか。 A)面積=幅×高さ÷2 B)幅と高さを掛けて2で割ったものを面積とす...

  • friend関数(protected関数)は普通に使うやろ… 抽象クラス書いたことあらへんのかいな。

  • friend関数とpublicなstatic関数。 static関数は、foo::func() とクラス指定を付けなければならないだけで機能はfriend関数と同じ。 でもstatic関数不要論は言われないのに、friendはいらない子といわ...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん