C++第五編継承と派生

1253 ワード

派生クラスは、すべてのベースクラスの構造関数および構造関数以外のすべてのメンバーを継承するため、派生クラスはベースクラス構造関数の呼び出しを担当する必要があります.
  • ベースクラスメンバーおよびメンバーオブジェクトの初期化は、メンバー初期化リストで
  • を行う必要がある.
  • 派生クラスは、その直接ベースクラスを担う構造
  • のみを用いる.
    多継承二義性
  • 異なるベースクラスの同じメンバーclass Base1{public:void fun(){}}; class Base2{public:void fun(){}}; class Derived : public Base1,public Base2{}; int main(){ Derived obj; obj.fun(); // obj.Base1::fun(); // return 0; }
  • 共通ベースメンバー(共通祖父クラス)class A{ public: int a;}; class B1 : public A{ private: b1;}; class B2 : public A{ private: b2;}; class D : public B1,public B2{public: void fun(); private: int d;} int main(){ D obj; obj.a = 1; // , ( ) obj.A::a = 1; //obj.A::a obj.B1::a = 1; // return 0; }
  • ダミーベースクラス
    祖父類を解決するために、その孫類に生じる可能性のある二義性(上記第2の場合)class : virtual {};
  • 虚基類は構造関数に特に注意が必要であり、孫類では祖父類(虚基類)を初期化する必要がある(非虚基類では父類のみを初期化し、祖父類を初期化する必要はない),(例省略)
  • .// class Base{}; class B1 : virtual public Base{}; class B2 : virtual public Base{}; class B3 : public Base{}; class Derived : public B1,public B2,public B3{};だからDerivedはB 1,B 2からBaseのメンバーを1人だけ引き継ぐのですが、B 3からもう1人のBaseのメンバーを引き継ぐのはあまり役に立たないと思いますが、少なくとも今まで私が接触していたC++プロジェクトではあまり使われていないので、紹介は詳しくありません.