Я решил попытаться вспомнить, что я узнал в своем объектно-ориентированном классе программирования пару лет назад, написав текстовую RPG-игру. Я не уверен, что я надеюсь когда-нибудь закончить работу, и мне все равно. Я просто хочу узнать, как писать программы.Участники против подклассов в OOP
Помня об основах работы функций, типов данных и классов в C++, я написал следующий код.
class Character
{
string Name;
public:
Character()
{
Name = "Charname";
}
string GetName(){return Name;}
void SetName(string sName){Name=sName;}
};
Теперь я хотел бы, чтобы у моих персонажей были расы. Первая идея заключалась в создании подклассов класса Character, по одному для каждой из разрешенных рас. Мне кажется, что это похоже на объектно-ориентированное программирование. Но я начал думать, как это будет работать. Я хотел бы сказать такие вещи, как «если Том - человек, Клара - орк, а Том и Клара пытаются выйти замуж, дать сообщение об ошибке». Я, вероятно, также хотел бы, чтобы люди и орки имели разные методы для разных вещей.
Мне кажется, что в первом случае я хочу рассматривать Гонку так, как если бы это был член (который я понимаю как атрибут) персонажа, а в первом, как если бы это был подкласс.
Является ли прежним даже возможным, если человек является подклассом персонажа? То есть, может ли объект узнать, в каком классе он находится?
И что мне делать и почему?
http://en.wikipedia.org/wiki/Virtual_function Виртуальные функции в сочетании с подклассом - это, вероятно, то, что вы ищете. Вы можете использовать метод 'getRace()' или что-то подобное и соответствующим образом определить его для каждого класса. – cactus1