C++スタイルブック ←こーゆー本を買いました。
本屋さんでそのテのコーナーで背表紙を舐めてて見つけた。
見覚えのある著者だなーと中身をめくれば、僕のC++スキルアップに
ものっすごい影響を与えてくれたRogue Waveの面々だったのでレジに直行。
僕がC++に手を染め始めた頃、ちいさな広告で見つけたRogue waveの
クラスライブラリ:Tools.h++、これと出会わなければここまでC++に入れ込む
ことはなかったと思う。
…中身は看板通り、スタイルガイドです。
その中にひとつ、目からウロコなスタイルめっけ。
「仮想メソッドはprotectedと宣言して、publicの非仮想メソッドから呼び出す」
つまりこゆこと。
class Base {
// derived-class で再定義すっかも。
public virtual void function() { ... }
}
class Derived : Base {
// 再定義汁!
public override void function() { ... }
}
こうするな、と。
そじゃなくてぇ、
class Base {
// derived-class で再定義すっかも。
protected virtual void doFunction()
{ System.Console.WriteLine("Base"); }
public void function()
{ doFunction(); }
}
class Derived : Base {
// 再定義汁!
protected override void doFunction()
{ System.Console.WriteLine("Derived"); }
}
こうしろ、と。
…深い、深いなー。 こうすることで Base.functionに仕組んだ
事前条件/事後条件/不変表明モロモロを導出側で繰り返さずに済むわけだ。
20年C++と付き合ってきたけど、まだまだ学ぶトコロ少なからずっす。