Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.11.2020
Сообщений: 18
1

Создаётся копия объекта

04.07.2022, 01:07. Показов 1206. Ответов 2
Метки c++, sfml (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Разбираясь с одной задачей возник вопрос.

Допустим, есть объект Engine, который имеет private-переменную, которая в свою очередь является объектом типа Globals, который тоже имеет private-переменную, которая является уже типом Player (извините...).

В начале программы, я просто создаю объект типа Engine, и тем самым запускаю ряд созданий "объектов внутри объекта".
Задача состоит в том, чтобы при работе с объектом типа Engine получать и изменять и его "подобъекты". (Код ниже)

C++
1
2
3
4
5
6
7
8
9
10
class Engine
{
    private:
        Globals globals;
    
    public:
        Engine() = default;
 
        void someFunc();
}
C++
1
2
3
4
5
6
7
8
9
10
class Globals
{
    private:
        Player player;
    
    public:
        Globals() = default;
 
        Player getPlayer() {return player;}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Player
{
    private:
        sf::CircleShape shape;
    
    public:
        Player()
        {
            shape = sf::CircleShape(50.f);  
        }
 
        void movePlayer()
        {
             shape.move(sf::Vector2f(10, 10)); // Как пример чего-то, что можно делать с объектом Player и его полями  
        }
}
Так вот, если я где-то, как я уже сказал, начинаю делать что-то в роде:
C++
1
2
3
4
void Engine::someFunc()
{
    globals.getPlayer().movePlayer();
}
То ничего не происходит (подозреваю, что где-то почему-то происходит копирование)...
Но если же поле player объекта типа Globals станет вдруг не private, а public, и к нему можно будет обратиться на прямую, то бишь вот так:
C++
1
2
3
4
void Engine::someFunc()
{
    globals.player.movePlayer();
}
То всё работает прекрасно и так, как я и задумывал (то есть один объект хранит другой, а тот в свою очередь третий, и я могу управлять параметрами каждого) - вопрос почему? Заранее спасибо
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.07.2022, 01:07
Ответы с готовыми решениями:

Создается ли копия объекта при индексации вектора?
for (size_t i = 0, n = v.size(); i < n; ++i) { //элементы вектора - string string &s = v; // тут const string &cs = v; //а тут? }...

Почему когда возвращается об'єкт создается новая копия но она создается через конструктор а не через конструктор копии?
Я создал конструктор копий чтоб он визивался при созданию копий функция возвращает обьект но когда возвращает то дальше исполняется код...

Создаётся ли копия инструкции написанной программистом?
Смысл в следующем. Предположим программист пишет код(разные условия там функции переменные и т.д. имеется в виду программу), далее мы её...

2
Модератор
 Аватар для Curry
5113 / 3352 / 535
Регистрация: 01.06.2013
Сообщений: 7,076
Записей в блоге: 9
04.07.2022, 01:39 2
Лучший ответ Сообщение было отмечено g0rgol как решение

Решение

Тут объект копируется
C++
1
Player getPlayer() {return player;}
замените на
C++
1
Player& getPlayer() {return player;}
0
0 / 0 / 0
Регистрация: 09.11.2020
Сообщений: 18
04.07.2022, 13:07  [ТС] 3
Цитата Сообщение от Curry Посмотреть сообщение
Тут объект копируется
Премного благодарен, разобрался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.07.2022, 13:07
Помогаю со студенческими работами здесь

почему в массиве str хранятся значения str2, ведь в функции создается копия...разве нет?
почему в массиве str хранятся значения str2, ведь в функции создается копия...разве нет?..) #include <iostream> using namespace...

Не создается резервная копия на Python
Задача: Составить программу, которая создаёт резервные копии всех наших важных файлов. (Книга "A Byte Of Python") import...

Не создаётся резервная копия файла
import os import time # 1. Файлы и каталоги, которые необходимо скопировать, собираются в список. source = # Заметьте, что для...

Не Сохраняется Документ. Создается Лишняя Копия.
Помогите решить проблему. Есть агент, который создает документ копированием. После заполнения полей пытаюсь сохранить док, но...

Создается копия рабочего места. Розница
ДД. Непонятные дела. В списке баз 2 базы с одинаковым названием. В списке рабочих мест, тоже копия рабочего места. Розница. Вирусы? Сеичас...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Winforstrap или красявый дизайн своими руками на HTML+JS+Winform­s
anomal6 04.03.2025
Сидел тут вечером ковырял проект на MAUI, и как же глупо создаются пакеты MSIX и система обновлений пакета публикации, но не об этом. Бывает нужен современный дизайн программы а писать на MAUI,. . .
Формат данных для симуляции физики, посредством распространённы­­­­­­­х не обученных моделей.
Hrethgir 04.03.2025
Что-то как-то снова потерялось, зато катангенсы закатангесились в одном сообщении. На днях писал, что планирую для работы апгрейдить (на этот раз удачно) девайс для работы (конкретно - здоровья для,. . .
Концепция variadic
CoderHuligan 04.03.2025
Мне не очень нравится (а кому это нравится?) что у нас есть отдельно компилятор, отдельно линковщик, причем со своим собственным командным языком. При этом усложнении надо знать помимо языка. . .
Java Record или Kotlin Data Class: что лучше для неизменяемых данных
Wired 04.03.2025
Java Record и Kotlin Data Class — два мощных инструмента для обуздания неизменяемых структур данных, каждый со своим уникальным подходом к решению этой задачи. История их появления весьма. . .
Создание производительны­­­х API с Java и gRPC
Wired 04.03.2025
В мире микросервисной разработки вопрос производительности часто становится краеугольным камнем. И хотя REST API давно завоевал сердца разработчиков своей простотой и интуитивностью, при высоких. . .
Что нового в JDK 24
Wired 04.03.2025
JDK 24 — это настоящий прорыв в эволюции Java, который кардинально меняет правила игры. В этом релизе разработчики Oracle наконец-то довели до ума множество критически важных улучшений в. . .
Разработка блокчейн с использованием Java: смарт-контракты и dApp
Wired 04.03.2025
Погружаясь в мир блокчейн-разработки на Java, разработчик получает доступ к внушительному арсеналу инструментов. В отличие от Solidity, который "заперт" в экосистеме Ethereum, Java предоставляет. . .
WebAssembly в Kubernetes
stackOverflow 03.03.2025
WebAssembly (Wasm) эволюционировал из технологии для высокопроизводительных вычислений в браузере в мощный инструмент для облачных вычислений и оркестрации контейнеров. По сути, это бинарный формат. . .
GitHub Actions или Jenkins: Выбираем CI/CD платформу
stackOverflow 03.03.2025
Непрерывная интеграция и развертывание (CI/ CD) перевернули подход к разработке ПО, превратив его из разрозненных действий в единый поток от написания кода до деплоя. GitHub Actions и Jenkins. . .
Автоматизация тестирования Pull Request в Kubernetes: Интеграция с GitHub Actions и GKE
stackOverflow 03.03.2025
Kubernetes стал неотъемлемой частью крупных проектов, но с ростом сложности инфраструктуры ручная проверка Pull Request превращается в настоящую головную боль. Традиционный подход банально не. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru