0 / 0 / 0
Регистрация: 09.11.2020
Сообщений: 18
1

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

04.07.2022, 01:07. Показов 1213. Ответов 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
5141 / 3363 / 536
Регистрация: 01.06.2013
Сообщений: 7,122
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Циклы for в Python
py-thonny 17.03.2025
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем. . .
Предсказание ветвлений - путь к высокопроизводи­тельному C++
NullReferenced 17.03.2025
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых. . .
Паттерн CQRS в C#
UnmanagedCoder 17.03.2025
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,. . .
Паттерн Цепочка ответственности в C#
UnmanagedCoder 17.03.2025
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос. . . .
Создаем микросервисы с NestJS, TCP и Typescript
run.dev 17.03.2025
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node. js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает. . .
Гексагональная архитектура со Spring Boot
Javaican 17.03.2025
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность. . .
Позиционировани­е Kafka Consumer и Seek-операции
Javaican 17.03.2025
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого. . .
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru