新・明解C++で学ぶオブジェクト指向プログラミング | ||||
|
第5章 継承
*クラスメンバ初期化例
class Member { std::string full_name; Member( const std::string& name, int no, double w) : full_name(name), number(no) { } } int main() { Member kaneko("金子健太", 15, 75.2); }
*同一あるいは類似したクラスを、仕様の異なる別のクラスとして実現すると、プログラムのあちこちに”似て非なる”クラスが溢れかえってしまい、プログラムの開発効率・保守性が低下する。
*クラスの派生において、コンストラクタとデストラクタは継承されない。
*派生クラスのコンストラクタ例:
Derived( int aa, int bb, int xx) : Base(aa, bb), x(xx){}
*スライシング:ベースクラスオブジェクトにたいし、派生クラスオブジェクトを代入できる。
逆向きの代入はできずコンパイルエラーとなる。
*クラスオブジェクトの参照
void slim_off( Member& m, double dw) { double weight = m.get_weight(); if( weight > dw) m.set_weight(weight - dw); } main Member kaneko("金子健太”、15, 75.2 ); slim_off(kaneko, 3.7); VipMember mineya("峰屋隆二", 17, 89.2 ); slim_off(mineya, 15.3);
*派生クラス型のポインタや参照は、ベースクラス型オブジェクトを指したり参照できない。
感想)
将来的に継承されることを想定した、綺麗なベースクラスを作るのって意外と難しいかも。結局ベースクラスも修正するなんてことになってしまいそうな。。。