院長のメモ帖
2016年6月18日 土曜日
C#プログラマへのC/C++の罠 その2継承修飾子?
最近はだいぶC++にも慣れ、変なエラーが出ることも少なくなりましたが、今日は久しぶりにやらかしました。
class Parent
{
virtual void Method1();
}
class Child : Parent
{
void Medhod1();
}
いわゆる、継承クラスを作ったわけですが、C++でもC#でもこの構文はだいたい同じですね。
C#では、常に修飾子overrideが子クラスのメソッドに必要ですが、C++の場合は抽象メソッドの実装時にだけ必要なのが違いますね。
まあ、そこも3分ぐらい手が止まりましたが、上記のC++コードにはもっと恐るべき罠が隠されていました。
C++プログラマーの方は、もう何が罠かお分かりかと思いますが、C#プログラマーにはその存在すら知られていない、継承修飾子というものが欠けているのです!
上記のChild定義ではこの継承修飾子を省略していますので、コンパイラはそれを補って
class Child : private Parent
{
void Medhod1();
}
と解釈します。
するとどういうことが起こるかというと、親クラスの全メンバーのアクセス修飾子をprivateとして継承してしまいます。
となると、このChildクラスは親クラスからpublicメソッドを継承しても、外部からは呼び出せないprivateメソッドに変換してしまうので、外から見ると実質何も継承していないように見え、継承を前提としたコードはすべてエラー化してしまいます。
ですから、上記のコードは
class Child : public Parent
{
void Medhod1();
}
とpublic継承修飾子を書かなければならなかったのです。
いやー、継承修飾子にたどり着くまで、C++の継承解説ホームページを4つぐらい参照しましたよ。
このページにたどり着いて疑問が解消しました。継承修飾子について詳しく知りたい方は参照してください。
使わない機能なので解説してないんでしょうが、あるからには解説しておかないと、言語解説ページとしては失格ですね(<=他人に罪をなすりつけるな)。
以前、C++プログラマーの友人と話をしていて、彼はC->C++->C#の順に習得したので、C++からC#には非常にすんなり入れたといってました。
僕は、C->C#->C++の順なんですが、どうもこの道順には、いっぱいブービートラップが潜んでいるようです。
投稿者 | 記事URL
2016年6月6日 月曜日
Arduino互換機の値段って…
ここのところ引き続き、Arduinoで電子工作にはまっていますが、今回は、Arduino互換機の値段について。
何を隠そう、私は今までArduinoを買ったことがありません。いや、本家のArduinoのことです。
実は私の所有するArduinoはすべていわゆる互換機というやつです。それもほとんどがNano互換機です。
というのもAmazonで検索すると、とても信じられないような値段でArduino Nano互換機が売られているのです。
もうこれなんか、価格破壊なんて言うのもばからしい 値段差ですよ!?
私は平均500円ぐらいで、すでに10個以上のNANOを手に入れています。大半は中国からの発送なので時間がかかりますが、国内発送で600円台なんでざらにありますので、迅速にほしい場合は、こちらから頼んでいます。
え?なんでそんなに買ったかって?実は電源の逆刺しやらなんやらで累計6台のNANOと一台のMEGA2560を破壊しておりまして…現在、未使用のNANO在庫は2台。そろそろ追加で購入するかな。
投稿者 | 記事URL
カテゴリ一覧
- かんなのワンニャン日記 (30)
- フォトギャラリー (13)
- 院長のメモ帖 (69)
最近のブログ記事
月別アーカイブ
- 2020年4月 (1)
- 2018年7月 (1)
- 2018年4月 (1)
- 2017年6月 (3)
- 2017年5月 (2)
- 2017年2月 (1)
- 2016年8月 (1)
- 2016年7月 (1)
- 2016年6月 (2)
- 2016年5月 (2)
- 2016年2月 (1)
- 2016年1月 (1)
- 2015年11月 (1)
- 2015年10月 (3)
- 2015年7月 (1)
- 2015年6月 (1)
- 2015年5月 (1)
- 2015年4月 (1)
- 2015年1月 (1)
- 2014年12月 (2)
- 2014年10月 (1)
- 2014年6月 (1)
- 2014年4月 (2)
- 2014年3月 (2)
- 2014年1月 (1)
- 2013年12月 (1)
- 2013年11月 (2)
- 2013年10月 (2)
- 2013年9月 (1)
- 2013年8月 (3)
- 2013年7月 (2)
- 2013年6月 (3)
- 2013年4月 (1)
- 2013年2月 (2)
- 2013年1月 (1)
- 2012年11月 (1)
- 2012年10月 (2)
- 2012年9月 (3)
- 2012年8月 (3)
- 2012年6月 (1)
- 2012年5月 (1)
- 2012年4月 (3)
- 2012年3月 (2)





