Nano Hash - криптовалюты, майнинг, программирование

Защищенный доступ к членам другого объекта (производного от того же базового класса) из производного класса

В качестве предисловия, это мой первый пост на Stack Exchange, поэтому прошу прощения, если с моим постом что-то не так, дайте мне знать.

Я также хотел бы сказать, что я новичок в C ++, мой единственный опыт работы с ним связан с классом, который я сейчас веду в своем университете. Я пытаюсь изменить код, который я написал ранее, в несколько более чистых классов и структур.

Итак, чтобы объяснить немного, я делаю проект с игрой Nine Men's Morris. У меня будет как минимум два разных типа игроков. Практически все между разными классами игроков. Единственное отличие состоит в том, как работают некоторые методы.

Из-за сходства между типами игроков я написал базовый класс Player и создал два производных класса. Базовый класс Player определяется примерно так:

Class Player {
protected:
    vector<Piece> pieces_;
    MillSet mill_set_;
    Stats statistics_;

    virtual void initialize(Player&)=0;
    virtual void normal(Player&)=0;
    virtual void fly(Player&)=0;        
};

Существуют и другие защищенные и общедоступные методы, но это основные методы, которые будут меняться между каждым производным классом. Я не могу определить функции "virtual void" в базовом классе, поэтому я прочитал это, помечая его "= 0;" означает, что его действительно нет в базовом классе.

В любом случае, я определил один из производных классов следующим образом:

class RandomPlayer : public Player {
private:
    void initialize(Player& other_player);
    void normal(Player&);
    void fly(Player&);
    Piece& choose_to_move(Player&);
    Piece& choose_to_remove(Player&);

public:
    RandomPlayer() : Player() {};
};

Функции, которые принимают Player & в качестве параметра, нуждаются в доступе к нескольким защищенным членам и методам, которые определены в базовом классе. Я видел в сети, что можно использовать ссылку на базовый класс объекта. Я надеялся, что передача Player & методу производного класса позволит мне получить доступ к защищенным методам Player, но, похоже, это не так.

Что-то не так в моем подходе к этой проблеме или чего-то не хватает? Есть ли у меня способ обойти это? Я надеюсь, что вне зависимости от того, какого игрока я перейду, я смогу вызывать защищенные элементы и методы переданного типа игрока.

Я новичок в ООП, но мне нравится эта идея, и я хотел бы узнать о ней. Я пометил сообщение как «Полиморфизм», но я все еще не совсем уверен в этой идее, поэтому, пожалуйста, дайте мне знать, если это не имеет смысла в качестве тега.

Спасибо за любую помощь.


  • Добро пожаловать в Stack Overflow! Как новичок здесь, пройдите тур и прочтите Как спросить. Кроме того, поскольку у вас есть рабочий код, который вы хотите улучшить, альтернативой будет codereview.stackexchange.com. Что касается вашей конкретной проблемы, было бы полезно, если бы вы извлекли минимальный воспроизводимый пример. В нынешнем виде и слишком много, и слишком мало. 01.12.2018
  • Здесь как минимум 10 вопросов по этой проблеме. Взгляните на них! stackoverflow.com/ 01.12.2018
  • Спасибо, ребята, за ответы! Для тех, кто найдет эту страницу в будущем, у этой страницы есть отличный ответ на то, что я спрашивал! 02.12.2018

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..