2012-07-08 48 views
1

我有一些班級在這裏:如何正確使用繼承,同時保持高效?

class weapons 
{ 
protected: 
    int damage, armor, cost; 
}; 

class sword : public weapons 
{ 
public: 
    // Initialization for the sword class. 
    void initialize() 
    { 

    } 
}; 

class shield : public weapons 
{ 

}; 

我開始這些工作,我不記得如何設置的傷害,護甲,併爲每個繼承類的成本。我該怎麼做呢?什麼是快捷方式(不一定很容易)?

回答

6

在類中設置變量的正確方法是通過類的構造函數。派生類應該使用初始化器列表來設置其基類中的變量。

class weapon { 
protected: 
    int damage, armor, cost; 
    weapon(int d, int a, int c) : damage(d), armor(a), cost(c) {} 
}; 

class sword : public weapon { 
private: 
    int weight; 
public: 
    sword(int d, int a, int c, int w) : weapon(d, a, c), weight(w) {} 
}; 

替換地,如果子類控制在基座中的值(即,用戶未通過damagearmor,或cost可以做到這一點:

sword(int w) : weapon(30, 5, 120), weight(w) {} 

編譯器將優化此代碼到內聯的東西正確,所以你不應該擔心增加額外的構造函數層造成的性能損失。

+0

沒錯。我以爲我錯過了一些東西。謝謝。還有一個關於這個問題。我需要一個'{}'還是可以使用';'? – VinylScratch 2012-07-08 16:16:56

+0

@VinylScratch C++語法需要在方法體和構造函數體周圍使用一對大括號,所以不能爲構造函數的空主體使用獨立的非操作「分號」語句。 – dasblinkenlight 2012-07-08 16:21:41

1

只需在兒童班中使用它們即可。因爲這些屬性在父級中被定義爲受保護的,所以可以像子級中的普通變量一樣訪問它們。像這樣:

damage = 60; 
armor = 0; 
cost = 42; 
1
class weapons 
{ 
protected: 
    int damage, armor, cost; 
    weapons(int d, int a, int c): 
     damage(d), armor(a), cost(c) { } 
}; 

class sword: public weapons { 
    public: 
    sword(): weapons(10, 12, 31) { } 
} 
class shield: public weapons { 
    public: 
    shield(): weapons(1, 22, 48) { } 
}