Как мне рассказать классу для создания уникальных подклассов - PullRequest
0 голосов
/ 21 марта 2019

Я определил класс с именем Instrument, который я инициализирую, вызывая функцию в классе с именем инструмента, которое будет отображаться на дисплее.

Теперь я создаю два инструмента:

Instrument Organ
Instrument Piano

У меня также есть другой класс под названием Screen, который обрабатывает изменяющиеся значения, такие как громкость, и выводит эти значения на дисплей.Например, у него есть функция с именем IncValue(), которая делает то, что говорит.

Я хочу создать подклассы, которые могут повторяться для всех инструментов, такие как:

Screen Volume

Это объявит int16_t volume и IncValue() увеличат громкость, DecValue() уменьшат ее.

Но как мне создать эти Screens из Instrument Class, чтобы я мог делать такие вещи, как

Organ.Volume.IncValue()

(или -> возможно, я полностью потерялся на этом уровне сложности) и

Piano.Volume.IncValue()

, и они работают только на соответствующем инструменте.

В конце концов будетОбъявлены сотни инструментов, поэтому я действительно не хочу объявлять уникальные классы, такие как Screen PianoVolume и Screen OrganVolume.

Надеюсь, это не слишком сложный вопрос.

1 Ответ

0 голосов
/ 21 марта 2019

Я думаю, что вы путаетесь между классами и объектами.Просто у класса Instrument есть объект класса Screen.Остальное затем следует естественным образом.

Таким образом, вы можете иметь (немного расширяя свои идеи):

class Screen
{
public:
    void IncValue ();
private:
    int volume;
};

class Instrument
{
public:
    Screen screen;
    ...
};

class Piano : public Instrument
{
    ...
};

И тогда вы можете сделать (например):

Piano MyPiano;
MyPiano.screen.IncValue ();
...

для любого Инструмента или подкласса Инструмента.

...