ホーム 院内・スタッフ紹介 診療時間・アクセス フォトギャラリー
0574-27-6355

院長のメモ帖

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++の順なんですが、どうもこの道順には、いっぱいブービートラップが潜んでいるようです。



投稿者 美濃加茂市のIT獣医師 近藤 博 | 記事URL | コメント(2)

2016年6月 6日 月曜日

Arduino互換機の値段って...

ここのところ引き続き、Arduinoで電子工作にはまっていますが、今回は、Arduino互換機の値段について。
何を隠そう、私は今までArduinoを買ったことがありません。いや、本家のArduinoのことです。

実は私の所有するArduinoはすべていわゆる互換機というやつです。それもほとんどがNano互換機です。
というのもAmazonで検索すると、とても信じられないような値段でArduino Nano互換機が売られているのです。



もうこれなんか、価格破壊なんて言うのもばからしい 値段差ですよ!?
私は平均500円ぐらいで、すでに10個以上のNANOを手に入れています。大半は中国からの発送なので時間がかかりますが、国内発送で600円台なんでざらにありますので、迅速にほしい場合は、こちらから頼んでいます。

え?なんでそんなに買ったかって?実は電源の逆刺しやらなんやらで累計6台のNANOと一台のMEGA2560を破壊しておりまして...現在、未使用のNANO在庫は2台。そろそろ追加で購入するかな。

投稿者 美濃加茂市のIT獣医師 近藤 博 | 記事URL | コメント(0)