スーパークラス「soldier」のメソッドへ、同じくスーパークラスの「captain」を共通のサブクラスである「man」として渡したのですが、メンバ変数の数値が明らかにおかしくなります。
x 2.758594528255e-312#DEN double
y 4.031792009257e-313#DEN double
など。他にも、一見正常に見えた変数も他の変数と数値が入れ替わってたり、bool型の変数もfalseにしてたものがtrueだったりと色々おかしかったです。
メンバ変数を直接渡す形に変えると、正常な数値を渡せることがわかっているのですが、原因がよくわかりません。
どういう問題が考えられるでしょうか?
よろしくお願いします。
サブクラスとしてオブジェクトを渡すとメンバ変数の数値がおかしくなります
Re: サブクラスとしてオブジェクトを渡すとメンバ変数の数値がおかしくなります
このコードの問題点はお分かりになるでしょうか
http://ideone.com/ZtG8me
配列は型の大きさ×型の数の領域を確保するものでしかありません
また添え字は先頭から指定バイトずらした位置の領域を指定の型として扱うものです
ポリモーフィズムが有効なのはポインタに限られており、実体の変換はできません
(ダメな例) man a = (man)(captain());
captainへのポインタ(captain*)はman型のポインタ(man*)に代入できるのでプログラムは動きますが
添え字でアクセスしたときにman[1]はcaptain[1]を指しません。
複数のcaptainをまとめてmanとしてあるクラスへ渡したい場合は
各captainを指すポインタをすべてman型のポインタに変換しておく必要があります
newを使うことも検討してみてください
http://ideone.com/ZtG8me
配列は型の大きさ×型の数の領域を確保するものでしかありません
また添え字は先頭から指定バイトずらした位置の領域を指定の型として扱うものです
ポリモーフィズムが有効なのはポインタに限られており、実体の変換はできません
(ダメな例) man a = (man)(captain());
captainへのポインタ(captain*)はman型のポインタ(man*)に代入できるのでプログラムは動きますが
添え字でアクセスしたときにman[1]はcaptain[1]を指しません。
複数のcaptainをまとめてmanとしてあるクラスへ渡したい場合は
各captainを指すポインタをすべてman型のポインタに変換しておく必要があります
newを使うことも検討してみてください
Re: サブクラスとしてオブジェクトを渡すとメンバ変数の数値がおかしくなります
回答ありがとうございます。とても良くわかりました。
これからnewの方を試してみようと思います。
ありがとうございました!
これからnewの方を試してみようと思います。
ありがとうございました!