多繼承


#include <iostream>

using namespace std;
// 多繼承
class Parent1
{

public:
    void setP1(int a, int b)
    {
        this->a = a;
        this->b = b;
    }

    void show1 ()
    {
        printf ("a = %d, b = %d\n", a, b);
    }
public:
    int a;
    int b;
};

class Parent2
{
public:
    void setP2(int c, int d)
    {
        this->c = c;
        this->d = d;
    }

    void show2 ()
    {
        printf ("c = %d, d = %d\n", c, d);
    }
public:
    int c;
    int d;
};

class Child :  public Parent1,public Parent2
{
public:
    void setC(int e)
    {
        this->e = e;
    }

    void showC()
    {
        printf ("e = %d\n", e);
    }
public:
    int e;
};

// 類型兼容性原則在多繼承中同樣適用,基類指針會根據基類成在派生類中的排布做偏移
int main()
{
    Child c1;
    c1.a = 1;
    c1.b = 2;
    c1.c = 3;
    c1.d = 4;
    c1.e = 5;

    Child   *pc = &c1;
    Parent1 *p1 = &c1;
    Parent2 *p2 = &c1;
    p1->show1();
    p2->show2();


    printf ("pc = %p\n", pc);
    printf ("p1 = %p\n", p1);
    printf ("p2 = %p\n", p2);

    return 0;
}


#include <iostream>

using namespace std;
// 多繼承
class Parent1
{
public:
    int a;
    int b;
};

class Parent2
{
public:
    int a;
    int d;
};

class Child :  public Parent1,public Parent2
{
public:
    int e;
};

// 多繼承中的二義性: 通過類名 和 域解析符解決
int main()
{
    Child c1;
    c1.Parent1::a = 1;

    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章