2012-07-08 2 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) {} 
}; 

В качестве альтернативы, если подкласс контролирует значения в базе (т.е. пользователь не проходит damage, armor или cost вы можете сделать это:

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

компилятор оптимизирует этот код inline, поэтому вам не следует беспокоиться о производительности, связанной с добавлением дополнительного слоя конструкторов.

+0

Tha Правильно. Я думал, что чего-то не хватает. Благодарю. Еще один вопрос. Нужен ли мне '{}' или я могу просто использовать ';'? – VinylScratch

+0

Синтаксис @VinylScratch C++ требует пары фигурных скобок вокруг тел методов и конструкторов, поэтому вы не можете использовать автономный оператор no-op «точка с запятой» для пустого тела конструктора. – dasblinkenlight

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) { } 
} 
Смежные вопросы