![]() |
![]() |
TOP > C++ > 多重継承 |
![]() |
![]() |
多重継承
クラスの継承は、上限関係なく継承する事ができる。この時注意しなければならないのが、同じクラスを継承する時である。
以下のようなクラス階層の場合、ParentクラスをClassAは多重継承してしまう事になる。
![]() この時、ClassAはParentクラスのメンバを多重に継承する事になるため、コンパイラはどちらの基底クラスのメンバを参照するかわからなくなる。この多重継承を打破するには、Parentクラスのコピーを1個にしてClassAが継承すればよい。
このような多重継承をなくすための機能を「仮想基本クラス」といい、virtualキーワードで指定したクラスは、コピーが一つしか生成されない。
class クラス名 : vritual アクセス指定子 仮想基本クラス名...
多重継承の例
#include <iostream> using namespace std; class Parent { public: void func_parent() { cout << "class Parent func()" << endl; } }; //Parentクラスを仮想基本クラスとして継承 class Child1 : virtual public Parent { public: void func_child() { cout << "class Child1 func()" << endl; } }; //Parentクラスを仮想基本クラスとして継承 class Child2: virtual public Parent { public: void func_child() { cout << "class Child2 func()" << endl; } }; class Grandchild : public Child1, public Child2 { }; int main(int argc, char** argv) { Grandchild i_grandchild; i_grandchild.func_parent(); i_grandchild.Child1::func_child(); i_grandchild.Child2::func_child(); return(0); } |
![]() |
![]() |
Copyright 2007 ためになるホームページ All Rights Reserved. |