実行結果を見てあれ?となりました。windowオブジェクトのプロパティにselfやtopやparentがあるのはわかるのですが、window.windowが存在していることに疑問を感じました。クライアントサイドjavaScriptではwindowオブジェクトがグローバルオブジェクトのようなものだと、「サイ本」に書いてあったからです。
window.window 赤字のwindowは一体どこに存在しているんだろう。続きを読む
分数クラスには何が必要か考えてみます。
まず分子と分母は絶対に必要でしょう。それから、分数を約分するために約分関数とそのための二数の最大公約数を求める関数も必要です。それから足し算をするときには通分する必要がありますから通分関数とそのための二数の最小公倍数を求める関数も必要でしょう。
あとは、アクセッサは普通に必要でしょうし、分数の内容を文字列として出力するための関数も欲しいですね。また、C言語 - 分数の演算 : Please Comment on My Codeこの時に書いたコードの文字列から分数の値を読みだす関数も作りたいですね。
それから、四則演算をする関数もあった方がクラスの実用性が増すと思うので、これらも定義することにします。そして今回一番やりたかったC++での演算子のオーバーロードももちろんやります。対象とする演算子は、+, -, *, /, =, +=, -=, *=, /=, ==, !=, >=, <=, >, <, ++, --です。数が多いですが一つ定義すればそれを利用できるので問題ないです。たとえば、a - b は要は、a + (-b)。つまりマイナスも足し算と同じことですし、a += b は a = a + b; なので+演算子をそのまま流用できます。
あとは、これらの演算をする際に整数倍などもできるようにします。整数は分母が一のときだから、整数も分数クラスで表せます。そうすれば1 / 3が0.99999999999 ではなく三分の一にできるので、分数クラスの価値も上がるでしょう。
何やら偉そうに書いてきましたが、実はC++での実装もテストもほとんど終わっていてそれに合うようにこれが必要でしょうとか言っちゃてるだけなんです。文字列の読み込みとJavaでの実装はまだなので、ブログの更新を引っ張りながら終わらせるつもりです。「分数クラスを作ってみる」の連載?は長引いてしまうかもしれませんが、どうぞ温かい目で見守って下さいませ。
なお、これから載せていくプログラムに何かおかしな点や、こうした方がいいでしょう、というような意見がございましたらぜひコメントまたは、twitter の方で知らせていただけたら幸いです。
以前書いた記事C言語 - 分数の演算 : Please Comment on My Codeのコメントより、
Cって演算子の定義をユーザーはできないの?(Cはユーザー定義の演算子が使えるとか使えないとか耳にしたことがあるだけ、信ぴょう性ゼロ)
C++でなら演算子のオーバーロードができるらしいよ。
C++を習得したらこのプログラムを改良しようっと。
ということで改良してみました。
C++を習得できたかというところに関しては大いに疑問ですが、一応クラスの作り方と演算子のオーバーロードのやり方はわかったので作ってみました。
記事が長くなりすぎないように(ブログの更新を長く続けるために)(記事を書くのに一度にまとまった時間を使わないために)何回かに分けて分数クラスを紹介していきます。
なお、分数クラスはC++だけでなくJavaでも作って紹介するつもりです。
今回はプログラムの紹介はせず、宣言だけに留めておきます。
Javaを勉強した後にC++を勉強してコードを書いていたらいきなり行き詰ったので、JavaとC++のコンストラクタの定義の仕方の違いを検証してみました。
どこで行き詰ったかというと、Javaではコンストラクタの定義を既に定義済みの他のコンストラクタで定義できます。しかし、それをC++でやろうとしたら思わぬ動作を起こしてしまい行き詰ってしまいました。そこでJavaとC++のコンストラクタの違いを検証してみることにしました。
まず、Javaのコードと実行結果を示した後でC++との実行結果を比べたいと思います。注目してほしいのは、四つ目のコピーコンストラクタのthis()の使い方です。これをC++でやるとどうなるのかという検証です。
add20