[C++] classの階層

direct base classとindirect base classがある。
2つ以上のクラスを継承したクラスを多重継承(multiple inheritance)という
deriveは派生という意味

class Base1 {
    protected:
        int bs1;
    public:
        Base1(int b1=0) {bs1=b1;}
        void showBs1();
};

class Base2 {
    protected:
        int bs2;
    public:
        Base2(int b2=0) {bs2=b2;}
        void showBs2();
};

class Derived: public Base1, public Base2 {
    protected:
        int dr;
    public:
        Derived(int d=0){dr=d;}
        void showDr();
};

void Base1::showBs1() {
    cout << "bs1は" << bs1 << "です。\n";
}

void Base2::showBs2() {
    cout << "bs2は" << bs2 << "です。\n";
}

void Derived::showDr(){
    cout << "drは" << dr << "です。\n";
}

int main(){
    Derived drv;

    drv.showBs1();
    drv.showBs2();
    drv.showDr();
    return 0;
}

メンバ関数が同じ場合

int main(){
    Derived drv;

    drv.Base1::showBs();
    drv.Base2::showBs();
    drv.showDr();
    return 0;
}

仮想基本クラス(virtual base class)

class Base0 {
    protected:
        int bs0;
    public:
        Base0(int b0=0) {bs0=b0;}
        void showBs0();
};

class Base1 : public virtual Base0{
    protected:
        int bs1;
    public:
        Base1(int b1=0) {bs1=b1;}
        void showBs();
};

class Base2 : public virtual Base0{
    protected:
        int bs2;
    public:
        Base2(int b2=0) {bs2=b2;}
        void showBs();
};

class Derived: public Base1, public Base2 {
    protected:
        int dr;
    public:
        Derived(int d=0){dr=d;}
        void showDr();
};
void Base0::showBs0() {
    cout << "bs0は" << bs0 << "です。\n";
}

void Base1::showBs() {
    cout << "bs1は" << bs1 << "です。\n";
}

void Base2::showBs() {
    cout << "bs2は" << bs2 << "です。\n";
}

void Derived::showDr(){
    cout << "drは" << dr << "です。\n";
}

int main(){
    Derived drv;

    drv.showBs0();
    return 0;
}