回覆列表
  • 1 # YuYuYouEr

    您確定這個問題沒有寫顛倒嗎?

    我記得大家都問為什麼子類例項可以傳給父類形參,因為子類例項包含了父類的定義,可以認為子類擁有的屬性、方法大於等於父類,所以透過父類形參訪問其屬性和方法,都可以在子類例項中找的到。

    虛擬碼如下:

    class A

    {

    public int m_a;

    }

    class B : public A

    {

    public int m_b;

    }

    父類A有屬性m_a;

    子類B繼承父類A,又增加了屬性m_b;

    假設有兩個函式定義為:

    void testA(A paramA)

    {

    print(paramA.m_a); //這句正確

    //print(paramA.m_b): //這句不正確,註釋掉了

    }

    void testB(B paramB)

    {

    print(paramB.m_a); //這句程式碼正確

    print(paramB.m_b); //這句程式碼也正確

    }

    testA函式內paramA.m_b在常規的程式語言中是訪問不到的,有些IDE會直接提示語法錯誤;因為paramA的型別是A,父類A中沒有定義m_b。

    testB函式內paramB.m_a可以訪問,因為paramB的型別是B,人家從老爹那裡繼承來的。

    再看怎麼呼叫,先定義兩個例項:

    A a;

    B b;

    testA(a); //這句正確

    testA(b); //這句也正確,子類例項傳給父類形參

    testB(a); //這句不正確,例項a中沒有定義m_b

    testB(b); //這句正確

  • 中秋節和大豐收的關聯?
  • 巡撫能隨意處置按察使嗎?