Задать вопрос
  • Как правильно выстроить логику кода с соблюдением принципов ООП?

    @MarkusD Куратор тега C++
    Ben L, видимо с термином инварианта ты не знаком.
    Можно добавить getter-ы в interface.

    Еще раз. Минуя публичный интерфейс типа?
    Ты точно понимаешь мои слова? Что такое публичный интерфейс типа?
  • Как правильно выстроить логику кода с соблюдением принципов ООП?

    @MarkusD Куратор тега C++
    lipa44, хорошо, спасибо.
    // Грани кубика
    Plane UpPlane;
    Plane DownPlane;
    Plane LeftPlane;
    Plane RightPlane;
    Plane FrontPlane;
    Plane BackPlane;

    С этим тебе будет тяжело работать. Тебе ведь надо вращать строки на гранях. При этом, крайние строки на гранях приведут к вращению смежной грани. Вот с таким дизайном тебе будет неудобно. Придется писать много лишнего кода.
    Легче обозначить просто 6 граней в массиве, попутно определяя закон их смежности на ребрах.
    Кубик состоит из 6 граней, в каждой из которых N*N ячеек с цветом. Нас интересует только цвет ячейки. Всего цветов тоже 6. Цвета можно обозначить целыми числами от 0 и до 5.

    vector<vector<vector<MiniCube>>> arr;
    Это память решения? Этому тут не место. Представь что в другой ситуации ты просто дал кубик игроку покрутить. Зачем игроку это поле для игры? В кубике должны быть только свойства кубика. Еще в кубике должна быть функциональность от кубика. Снова представь игрока с кубиком, нужно ли ему что-то дополнительное чтобы крутить его? Не нужно ведь. Следовательно, у кубика должен быть интерфейс крашения его строк.

    #include "cubeSolving.h" // алгоритмы решения
    Если мы дадим кубик игроку, то зачем ему еще и информация о его решении? Этому заголовку тут не место.

    #include "rubikCube.h"
    Вот это уже на месте. Когда ты обращаешься к решениям кубика, тебе уже нужна информация о самом кубике и, собственно, сам кубик.

    cubeSolving() = default;
    А для кого решать будем? Сюда стоит передать ссылку на кубик, который и будем решать.
    В итоге у тебя игрок может взять кубик в произвольном состоянии, положить его в cubeSolving и ткнуть решалке решить.
    Решалка должна оперировать на переданном через конструктор кубике. Вращения она должна выполнять используя только публичный интерфейс кубика.

    Для того чтобы логика вращений не загружала класс кубика, ее можно вынести в тулкит - в отдельный тип, который через свой конструктор примет обозначенный выше массив из 6 граней по ссылке и предоставит интерфейс для вращения строк. При этом, публичный интерфейс кубика будет просто обращаться к этому тулкиту. Экземпляр тулкита даже в состояние кубика складывать не за чем, т.к. он все равно оперирует данными по ссылке.

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

    @MarkusD Куратор тега C++
    Ben L,
    и одному из них придется получить свойства от друнгого.

    минуя публичный интерфейс и, собственно, инвариант типа?
  • Как правильно выстроить логику кода с соблюдением принципов ООП?

    @MarkusD Куратор тега C++
    lipa44, так не пойдет. П3.8 регламента работы сервиса.
    Тебе стоит удалить изображения и вставить код текстом. Мне мои глаза дороже, я не буду читать мыльный текст с изображений.
  • Как правильно выстроить логику кода с соблюдением принципов ООП?

    @MarkusD Куратор тега C++
    lipa44,
    Я подключил к заголовочному файлу другой заголовочные файл, который называется «решение кубика», но после попытки объявить элемент класса кубик в этом заголовочном файле или принять в качестве параметра функции, мне среда разработки говорит (can’t resolve type “rubikCube”), хотя я просто создаю/принимаю переменную того типа, которая у меня прописана в заголовочном файле, который я подключил.

    Давай вот этот момент посмотрим в твоем коде. Выпиши в сокращенном виде свои заголовки, оставив в них только описываемые тобой строки кода.
    У тебя должно получиться что-то вроде этого
    // cube.h
    ...
    #include ???
    ...
    class Cube
    {
    ...
    };
    
    // solutions.h
    ...
    class Solution
    {
    ...
    };

    Со всем остальным будем разбираться по ходу дела.
  • Как правильно выстроить логику кода с соблюдением принципов ООП?

    @MarkusD Куратор тега C++
    lipa44 ,
    я уже не могу использовать приватные поля самого кубика в тех же алгоритмах решения

    Такие алгоритмы решения уже неправильные.
    реально ли это на практике и у меня просто не получается это сделать или так и должно быть?

    Да, это реально. Но сперва нужно понять твои собственные проблемы и заблуждения. Кажется, в отношении ООП у тебя их много.
    Если сам класс кубика нельзя заставить видеть заголовочные файлы и использовать в них приватные поля кубика без наследования

    Почему заголовочные файлы должен видеть именно класс, а не транслятор твоего кода? Почему класс кубика должен иметь родителя? Почему поворот грани должен быть именно типом, а не функцией? Почему шаг решения задачи должен быть типом, а не функцией?
  • Паттерн "Фабричный метод": как получить конкретный продукт из конкретной фабрики?

    ragnar_ok , ознакомься с вопросом и его решением.
    У тебя точно такая же путаница в голове сложилась, как и у автора того вопроса.
    И вот еще один вопрос на ту же тему, для большей конкретики.
  • Что означают просто { тут блок кода } в с++?

    @MarkusD Куратор тега C++
    IliaNeverov, на будущее. Прояви внимательность. Я попросил у тебя код вокруг участка, а не внутри него.
    Текущие решения все верно объясняют.
  • Что означают просто { тут блок кода } в с++?

    @MarkusD Куратор тега C++
    IliaNeverov , все зависит от контекста окружающего кода.
    Тебе надо показать код вокруг интересующего тебя участка.
  • Почему код неработает?

    @MarkusD Куратор тега C++
    galaxy , ответ, конечно, в регламент работы сервиса не вписывается сразу по множеству пунктов, но проблему, бесспорно, объясняет. :)
  • Как на физическом уровне происходит прошивка нового выращенного процессора или любого другого микроэлектронного устройства?

    AnnPartovi
    Мозг человека имеет с рождения способность распознать цвета, звуки, образы, лица и кучу-кучу другой информации

    Нет. Не имеет он такой способности с рождения. Бинокулярность зрения к ребенку приходит только с практикой использования глазных мышц в первый месяц жизни. Позже приходит и фокусировка на объектах. Еще позже - способность распознавать образы. Сложные объекты, вроде лиц людей, дети распознавать способны только в конце первого года жизни. Некоторые дети - итого позже, что может стать причиной ложного диагноза нарушения зрения.
    Тебе стоит почитать о развитии детского организма в первые годы его жизни.
    Все что есть у человеческого мозга от рождения - это высокий уровень нейропластичности.
  • Как привязать текстуру к определенному VAO?

    @MarkusD Куратор тега C++
    IliaNeverov, если описывать словами, то в идеале тебе потребуется N текстур с абсолютно идентичной топологией. Далее тебе потребуется геометрия, на которую абсолютно любая из N текстур будет накладываться абсолютно идентично с остальными.
    Ты получаешь пул из N текстур и персистентную геометрию.
    Далее тебе потребуется N буферов констант, в каждом из которых будет просто индекс слота текстуры.
    Твой шейдер вершин должен принимать геометрию и дописывать в нее индекс из текстуры подключенного константного буфера. А растровый шейдер просто должен семплировать текстуру из слота с требуемым индексом.
    Все. Это будет твоим простым решением.
  • Как привязать текстуру к определенному VAO?

    @MarkusD Куратор тега C++
    IliaNeverov , привязать текстуру к VAO невозможно. Для конвейера топология твоей геометрии, наличие на ней материалов и связанные с этим всем шейдеры являются всего лишь конструкционными элементами. Это тебе самому, в своем коде, своими логическими конструкциями необходимо задать требуемые для тебя связи между текстурами, шейдерами, вершинами и индексами со всем прочим.
    Текстурные блоки - это одно. Текстурные слоты - это другое. Текстурные блоки, или блоки растеризации, разведены непосредственно на кристалле GPU и отвечают за процессинг растеризации.
    Текстурные слоты шейдерной программы позволяют для одной геометрии задать несколько (до 16ти для тебя) текстур. При этом, действительно, можно добиться результата, когда геометрия будет одна и отображаться на ней будет только одна текстура (из 16ти), но при каждой отрисовке отображаться будет другая текстура.
    Все зависит от того, какой шейдер ты поставишь для обработки твоей геометрии.
  • Какая ошибка в коде?

    @MarkusD Куратор тега C++
    mercy_smile , а вопрос у тебя в чем?
  • Какой тип данных использовать?

    @MarkusD Куратор тега C++
    Mag1str, куда уж детальней? Ты ведь написал уже код сортировки по первому символу. Тебе надо чтобы когда первые символы одинаковы, сортировка была по третьему символу. Вот и все детали. Если этот код твой, то ты знаешь как это сделать.
  • Как передать одномерный массив из одной функции в другую?

    @MarkusD Куратор тега C++
    whatislov , дублирование вопросов запрещено П4.1 регламента работы сервиса.
    Для получения ответа тебе следует продолжить обсуждение в оригинальном вопросе.
  • Как передать одномерный массив из функции его формирования в функцию его вывода?

    @MarkusD Куратор тега C++
    whatislov , блочность кода в твоих примерах страдает катастрофически. Код нечитаем. Тебе стоит сделать исправления своего кода чтобы его можно было читать.

    int func (int **mas, int n)
    Почему тип результата функции у тебя именно такой? Как ты можешь обосновать необходимость именно такого типа результата?

    return masb[i];
    Почему результат возвращается именно таким выражением? Тут у тебя Buffer Overrun [?] присутствует.
    Как ты можешь оправдать необходимость именно такого выражения для формирования результата функции?

    Сейчас вызов func приводит к утечке памяти. Как ты можешь это исправить?
  • Как исправить ошибку конструктора класса c++?

    @MarkusD Куратор тега C++
    Данил Васькевич , приведенный код не содержит конструктора копирования [?]. У тебя в коде приведен разрушающий конструктор, использование которого крайне опасно для всего остального кода.
    Тебе требуется переписать разрушающий конструктор в конструктор копирования.
  • Размер MTU - суммирование пакетов возможно?

    Василий Смирнов, все вот эти предположения дают понять что ты совсем не владеешь информацией о принципах работы компьютерных сетей и сетей телекоммуникаций. Если тебе это интересно, тебе стоит хоть немного изучить общие основы. Например.

    я же не про буферизацию на моем компе, я про буферизацию на маршруте.

    Буферизации на маршруте не существует. IP пакет посылается по некоторому маршруту, на котором он может потеряться по пути или прийти с искажениями. В этом случае засчитывается потеря пакета. TCP позволяет приемнику уведомить источник пакета о потере чтобы тот провел повторную отсылку. UDP потере не уведомляет вообще никак и никого. Датаграмма потерялась да и бог с ней.
    Ты только представь себе это. Тут у тебя 300МБит/сек канал, а дальше каналы идут шириной уже в гигабиты и терабиты. И все вот это буферизировать на каждом узле? Лично у меня такое даже в фантазию не укладывается.
    Кисель по вечерам - это издержки загрузки каналов, в результате чего твой маршрут строится далеко не оптимальным образом.

    а значение MTU не входит влияет на условия?

    Если у тебя нет доверия к моим словам, то лучше будет обратиться к документам по маршрутизации. Например.

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

    Это закрытая информация. Читай что этих данных ни у кого нет и разглашены они быть не могут.
    На отзывчивость игры это никак не влияет потому что сервера всегда строго балансируются и рассчитываются так, чтобы ни один игрок не чувствовал проблем с производительностью.
    Такие вещи пользователей волновать не должны.