2016-02-12 139 views
3

也許題目有點混亂,所以我會盡我所能確保它儘可能清晰。從繼承變量構造派生類

基本上,我試圖創建一個遊戲,其中有一個叫做「Creature」的抽象基類,它下面有幾個派生的幻想生物類。

現在我的問題是:

,如果我有一個已經被保護的變量詮釋強度和INT裝甲一個基類,我怎麼可以用INT強度和INT裝甲構建一個派生類,使他們沒有得到自己的價值實際上是在這個班級中定義了力量和防具變量?

讓我寫我試圖實現的代碼。

class Creature 
{ 
    public: 
    Creature(); 
    private: 
    int armor; 
    int strength; 
}; 

class Human: public Creature 
{ 
    public: 
     Human(int a, int b): armor(a), strength(b) 
     { 
     } 
}; 

int main() 
{ 
    Human Male(30, 50); 
    cout << Male.armor; 
    cout << Male.strength; 
    return 0; 
} 

我該怎麼做?我需要在頭等艙內擁有盔甲和力量,所以我無法在每個派生類中聲明它。

任何幫助表示讚賞。謝謝!

回答

3

您可以在基類中創建一個以str和armor爲參數的構造函數,然後將它們傳遞給派生類的構造函數中的基礎構造函數。

class Creature 
{ 
    public: 
    Creature(int a, int s) : armor(a), strength(s) {}; 

protected: 
    int armor; 
    int strength; 
}; 

class Human: public Creature 
{ 
    public: 
     Human(int a, int s) : Creature(a, s) {} 
}; 

注意:您可以Creature構造protected如果你只想要派生類構造Creature

如果你想訪問armor和str值,你必須添加getter函數,因爲armor和strength是受保護的成員變量。

class Creature 
{ 
    public: 
    Creature(int a, int s) : m_armor(a), m_strength(s) {}; 

    int armor() const  { return m_armor; } 
    int strength() const { return m_strength; } 

protected: 
    int m_armor; 
    int m_strength; 
}; 

現在你可以有你的main()函數:

int main() 
{ 
    Human Male(30, 50); 
    cout << Male.armor(); 
    cout << Male.strength(); 
    return 0; 
} 
+0

太謝謝你了! –

1

允許在基類設置它們在構造函數中這些變量:

class Creature 
{ 
    public: 
    Creature(); 
    protected: 
    Creature(int armor_, int strength_) : armor(armor_), strength(strength_){}   

    int armor; 
    int strength; 
}; 

現在在派生類中,只需將這些傳遞給基類:

Human(int armor_, int strength_) : Creature(armor_, strength_){}  
+0

太棒了。非常感謝! –

+0

非常歡迎。 –

1

首先,確保基類有一個可以正確初始化其成員變量的構造函數。

class Creature 
{ 
    public: 

     Creature(int a, int b): armor(a), strength(b) {} 

    private: 
    int armor; 
    int strength; 
}; 

除非派生類需要進行初始化其他成員的數據,可以使用下面的結構,以便能夠使用基類的構造就像是在派生類中還定義。

class Human: public Creature 
{ 
    public: 
     using Creature::Creature; 
}; 

現在你可以使用:

使用

int main() 
{ 
    Human Male(30, 50); 
    return 0; 
} 

cout << Male.armor; 
cout << Male.strength; 

是不正確的,因爲armorstrengthCreatureprivate成員變量。您應該添加幾個訪問器函數並使用它們。

class Creature 
{ 
    public: 
    ... 

    int getArmor() const { return armor; } 
    int getStrength() const { return strength; } 

,然後用它們爲:

cout << Male.getArmor(); 
cout << Male.getStrength(); 
+0

對不起,應該受到保護!但是,謝謝你的建議。 –