院長のメモ帖
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++の順なんですが、どうもこの道順には、いっぱいブービートラップが潜んでいるようです。
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++の順なんですが、どうもこの道順には、いっぱいブービートラップが潜んでいるようです。
2016年6月 6日 月曜日
Arduino互換機の値段って...
ここのところ引き続き、Arduinoで電子工作にはまっていますが、今回は、Arduino互換機の値段について。
何を隠そう、私は今までArduinoを買ったことがありません。いや、本家のArduinoのことです。
実は私の所有するArduinoはすべていわゆる互換機というやつです。それもほとんどがNano互換機です。
というのもAmazonで検索すると、とても信じられないような値段でArduino Nano互換機が売られているのです。
もうこれなんか、価格破壊なんて言うのもばからしい 値段差ですよ!?
私は平均500円ぐらいで、すでに10個以上のNANOを手に入れています。大半は中国からの発送なので時間がかかりますが、国内発送で600円台なんでざらにありますので、迅速にほしい場合は、こちらから頼んでいます。
え?なんでそんなに買ったかって?実は電源の逆刺しやらなんやらで累計6台のNANOと一台のMEGA2560を破壊しておりまして...現在、未使用のNANO在庫は2台。そろそろ追加で購入するかな。
何を隠そう、私は今までArduinoを買ったことがありません。いや、本家のArduinoのことです。
実は私の所有するArduinoはすべていわゆる互換機というやつです。それもほとんどがNano互換機です。
というのもAmazonで検索すると、とても信じられないような値段でArduino Nano互換機が売られているのです。
もうこれなんか、価格破壊なんて言うのもばからしい 値段差ですよ!?
私は平均500円ぐらいで、すでに10個以上のNANOを手に入れています。大半は中国からの発送なので時間がかかりますが、国内発送で600円台なんでざらにありますので、迅速にほしい場合は、こちらから頼んでいます。
え?なんでそんなに買ったかって?実は電源の逆刺しやらなんやらで累計6台のNANOと一台のMEGA2560を破壊しておりまして...現在、未使用のNANO在庫は2台。そろそろ追加で購入するかな。