Как инициализировать статические члены в производных классах? - PullRequest
2 голосов
/ 04 апреля 2011

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

Я хотел бы, чтобы член класса инициализировался по-разному в каждом производном классе. Представьте, что у меня есть объект типа Device. Этот Device является просто интерфейсом, используемым кодом приложения, потому что фактические устройства имеют только один из двух типов, DeviceA или DeviceB. Есть некоторые функции, общие для всех устройств, такие как, скажем, название. Это должен быть тогда ученик, не так ли? Так что я бы получил:

class Device {
    static std::string sm_name;
}

Но у каждого устройства семейства есть свое имя. Как я могу инициализировать имя другим значением для каждого производного класса? Не верен ли дизайн? Должно ли свойство name не быть членом класса?

Ответы [ 2 ]

5 голосов
/ 04 апреля 2011

Разве свойство name не должно быть членом класса?

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

3 голосов
/ 04 апреля 2011

почему бы просто не иметь виртуальную функцию-член, которая возвращает имя, и реализовать ее в производном классе, чтобы вернуть правильное имя?

, например

class A
{
public:
   virtual std::string name() = 0;
};

class B : public A
{
public:
virtual std::string name() { return "typeB"; }
};

class C : public A
{
public:
virtual std::string name() { return "typeC"; }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...