в конструктор класса?
Что есть главный класс? Что есть простая логика?
Главный - т. е. начальный класс. Простая логика, это создание окна и подобные инициализирующие вещи
Если при создании обьекта человек ты в конструкторе приделываешь ноги, руки и т.п. то это можно и нужно делать в конструкторе, а если что-то пойдет не так, выбросишь исключение
Обращайся и не придумывай свою терминологию "главный класс"
Простая инициализация программы в конструкторе, какие-то простые вещи
А как его назвать?)
Хуй знает
Инициализировать в конструкторе это нормально
Конструктор же не приделывает , а заполняет. Разве не так. В классе уже есть поля к моменту начала работы конструктора, насколько я понимаю. Задача конструктора заполнить эти поля. Если класс человек, то в нем уже будут руки и ноги . Просто конструктор начинает заполнять эти поля. Например, в переменную ноги вставляет конкретные ноги.
ты мыслишь каким-то догмами. я могу делать в конструкторе все что угодно, в том числе и приделывать ноги, если это вписывается в рамки задачи и обязанности класса
Не понял. Значит я то то не понимаю. Ну вот есть класс человек и в нем поля туловище, голова, руки, ноги. Ты хочешь сказать, что в конструкторе я могу в класс занести новое поле? Например, поле половой орган? Насколько я знаю так можно в javascript, но не в с++.
У тебя в классе человек может лежать изначально пустой контейнер конечностей, который следует наполнить для правильного функционирования.
Ну это да. Это другое дело. Переменная - поле класса уже будет, конструктор лишь наполняет его. А вот создать новое поле, насколько я знаю возможно только в языках, с прототипным ООП как javascript
Тут никто и не говорит о создании новых полей
Насчет главного класса не скажу, а вот засовывать логику в класс идея, в принципе, нормальная. Но это зависит от того, чего ты хочешь от класса. Если класс это холодильник, то особо причин менять в нем логику нет, если же класс машинка в игре, то тогда да,- ты можешь сделать машинку, но принимающую программу работы, то есть ты можешь наполнить класс машинка некой программой извне (в с++ самое простое это передать указатель на функцию). И тогда машинка внутри себя будет вызывать функцию, переданную извне, так можно менять логику поведения объекта. Например, ты сделал игру и все хорошо, а потом решил чтоб машинка при наборе скорости близкой к максимальной становилась красного цвета. Если ты просто захардкодишь логику, то она так и будет жестко зашита в классе, а если ты будешь передавать функцию извне, то ты можешь быстро подменять логику работы машинки на ходу. То что я описал, называется передача функции как будто это данные (по факту мы передаем лишь адрес функции, но этого достаточно для вызова её клиентскому коду). Старайся только передавать чистые функции (без побочных эффектов), то есть если функция должна что то менять в классе, то создай такую функцию, которая будет что то принимать и что то отдавать. Допустим, твой класс машинка, как я уже сказал хочет менять цвет от скорости, создай функцию в которую ты будешь передавать скорость, а она будет возвращать цвет. То есть функции должно быть до лампочки куда ты этот цвет потом будешь использовать. Но можно также сделать функцию, которая будет принимать и целиком класс машинка (или указатель на него), так тоже можно, но тогда функция (ели ты передашь указатель) сможет втихаря дернуть метод твоего класса машинка и это будет побочный эффект. Лучше как я уже сказал, функцию использовать как мясорубку - положил в нее мясо, забрал из нее фарш. А дальше этот фарш уже используй где он тебе нужен, например, засунешь уже в метод класса "приготовитель котлет'
Ого. Спасибо за пояснение
Также ты можешь сделать и вот как. Наполнить твой класс сразу всеми вариантами логики (если их не так много этих вариантов), а извне просто будешь управлять классом через сеттер, какой из вариантов должен быть активным. Так тоже можно.
Мне кажется, это не привычно и не интуитивно
Ну почему же, нет это используется в автомобилях. Есть например кнопка, зимний режим, ты активируешь его и компьютер начинает использовать его. То есть в компьютере автомобиля уже заложены возможные варианты программ, а конечный пользователь выбирает. Точно также и стиральная машина автомат, в ней программы уже заложены, ты же не вставляешь картридж с программой в стиральную машину. Хотя так можно сделать, никакой проблемы в таком подходе нет.
Можно, но я хотел бы сделать код интуитивно понятным и легко-читаемым. А гетеры и сетеры и вообще подобное разделение, будет неприятно для глаза и менее интуитивным для тех, кто в нём разбирается
Ты сам должен придумать абстракции, как тебе удобно. Это прикольно и интересно.
Согласен. Однако, пока я даже нормально два файла связать не могу и об этом буду размышлять потом
Просто представь, что функция это рецепт приготовления. Вот любой рецепт из поваренной книги это есть функция. Написание функции это есть написание рецепта {возмите мясо; возьмите мясорубку; auto фарш = мясорубка.сделаймнефарш(мясо); return фарш;)
Обсуждают сегодня