C++第五編継承と派生
1253 ワード
派生クラスは、すべてのベースクラスの構造関数および構造関数以外のすべてのメンバーを継承するため、派生クラスはベースクラス構造関数の呼び出しを担当する必要があります.ベースクラスメンバーおよびメンバーオブジェクトの初期化は、メンバー初期化リストで を行う必要がある.派生クラスは、その直接ベースクラスを担う構造 のみを用いる.
多継承二義性異なるベースクラスの同じメンバー 共通ベースメンバー(共通祖父クラス) ダミーベースクラス
祖父類を解決するために、その孫類に生じる可能性のある二義性(上記第2の場合)虚基類は構造関数に特に注意が必要であり、孫類では祖父類(虚基類)を初期化する必要がある(非虚基類では父類のみを初期化し、祖父類を初期化する必要はない),(例省略) .
多継承二義性
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++プロジェクトではあまり使われていないので、紹介は詳しくありません.