---
# System prepended metadata

title: Multiple Inheritance

---


# Multiple Inheritance

> [NCTU OCW](https://www.youtube.com/watch?v=CRjqXylsmDE&list=PLj6E8qlqmkFtJIl6apB-V_7i1c3eqLjgf&index=9&t=47s)

```
class Boo: public Bum, public Foo
{

}
```
----

sofa   bed
''''\     /''''
''  sofabed
```
class Sofa{
public: void sit(){cout<<"sit"<<endl;}
};
class Bed{
public: void lie(){cout<<"lie"<<endl;}
};
class Sofabed:public Soft, public Bed
{
 //pass
};

int main()
{
    Sofabed myfur;
    myfur.sit();
    myfur.lie();

    return 0;
}
```

*resolution operator(::)界定符號
*Sofa and Bed are parents class(base class)
*Derived class must provide initial arguments for the constructor of each base class
*Format:

```
CDerived::CDerived(arg_B1, arg_B2,...,arg_Bn,arg_Derivrd):
    B1(arg_B1), B2(arg_B2),...,Bn(arg_Bn)
{
///
}
```

將初始參數(arg_B1...arg_Bn)傳入派生類別CDerived


*Copy constructors
```
CDerived::CDerived(CDerivrd & c1):
    B1(c1), B2(c1),...,Bn(c1)
{
///copy the rest data member
}
```
```
class B1{
    int x;
protected : int GetX(){return x;}
public: void SetX(int a=1){x=a;}
};
class B2{
    int y;
public: int GetY(){return y;}
        void SetY(int a=1){y=a;}
};
class B3{
    int z;
public: int GetZ(){return z;}
        void SetZ(int a=1){z=a;}
}

class D4 : public B1, public B2, public B3







```














