Свойства объекта в С++

274
26 ноября 2016, 18:53

Есть 2 лампочки. У каждой есть 2 состояния - активная(горит) и пассивная(цвет лампочки - черный). В ООП нуб. Создаю для лампочек класс Lamp и 2 метода, активирована и деактивирована. Как реализовать для разных объектов этого класса разное значение переменной lampColor?

 class Lamp {
    public:
        void activeted(lampColor) {
            SetConsoleTextAttribute(hStdOut, lampColor);
            std::cout << "LAMP";
        }
        void deactiveted() {
            SetConsoleTextAttribute(hStdOut, blackColor);
            std::cout << "LAMP";
        }
    private:
        HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); 
        int lampColor;
        int blackColor;
    };

Я делал так, но мне кажется это как то не правильно.

int redColor = 4;
int greenColor = 2;
Lamp redLamp;
Lamp greenLamp;
redLamp.activeted(redColor);
greenLamp.activeted(greenColor);

Можно же как-то более элегантно задавать параметры объектов, а то тавтология получается?

Answer 1

Я бы сделал следующим образом.

Во-первых, объявил бы перечисление, содержащее допустимые цвета. Потому что такие записи с магическими числами

int redColor = 4;
int greenColor = 2;

мало понятны.

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

Lamp redLamp( Red );
Lamp greenLamp( Green);

где Red и Green - это определенные в перечислении константы.

Для конструктора можно задать аргумент по умолчанию, который соответствует целому цвету, или каком-нибудь иному цвету. Поэтому если пользователь создаст объект как

Lamp whiteLamp;

то аргумент можно не указывать.

В самом классе я бы определил два члена данных. Первый задает цвет лампочки, а второй задает состояние лампочки, то есть включена она или нет. Соответственно сделал бы открытыми два метода switchOff и switchOn, которые меняли бы состояние лампочки и, соответственно, выводили ее на консоль в соответствии с ее состоянием.

READ ALSO
Вопрос по С++, нужна помощь [требует правки]

Вопрос по С++, нужна помощь [требует правки]

Вопрос по С++ и надо решить с использования двумерные массивы

209
Рендеринг текста при css трансформации

Рендеринг текста при css трансформации

Есть некоторый текст, который развернут на 90deg

527
Как подогнать все блоки под высоту самого высокого Bootstrap

Как подогнать все блоки под высоту самого высокого Bootstrap

Я делаю блог на WordPressЕсть вывод постов, но за счет картинки, названия, превью все блоки в линии разной высоты и это бросается в глаза

432
Вертикальный bootstrap navbar

Вертикальный bootstrap navbar

Как я могу сделать еще один navbar, чтобы он был вертикальным и прижат четко на одном месте слева?

938