Есть 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);
Можно же как-то более элегантно задавать параметры объектов, а то тавтология получается?
Я бы сделал следующим образом.
Во-первых, объявил бы перечисление, содержащее допустимые цвета. Потому что такие записи с магическими числами
int redColor = 4;
int greenColor = 2;
мало понятны.
Для класса я бы определил конструктор, который принимает объект данного перечисления, то есть конструктор изначально задает цвет лампочки. Например,
Lamp redLamp( Red );
Lamp greenLamp( Green);
где Red
и Green
- это определенные в перечислении константы.
Для конструктора можно задать аргумент по умолчанию, который соответствует целому цвету, или каком-нибудь иному цвету. Поэтому если пользователь создаст объект как
Lamp whiteLamp;
то аргумент можно не указывать.
В самом классе я бы определил два члена данных. Первый задает цвет лампочки, а второй задает состояние лампочки, то есть включена она или нет. Соответственно сделал бы открытыми два метода switchOff
и switchOn
, которые меняли бы состояние лампочки и, соответственно, выводили ее на консоль в соответствии с ее состоянием.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вопрос по С++ и надо решить с использования двумерные массивы
Я делаю блог на WordPressЕсть вывод постов, но за счет картинки, названия, превью все блоки в линии разной высоты и это бросается в глаза
Как я могу сделать еще один navbar, чтобы он был вертикальным и прижат четко на одном месте слева?