Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Удаление слов в кавычках с учётом экранирования Добрый вечер! Есть у меня проблема.Мне надо удалить в строки все слова с кавычками(с учётом экранирования т.е. если в строке я нахожу \знак то я пропускаю два знака и проверяю дальше ) и вроде я... https://www.cyberforum.ru/ cpp-beginners/ thread2491750.html C++ Инициализация класса через многоточие
Пытаюсь воспользоваться библиотекой https://github.com/gosha20777/keras2cpp Но не могу ее собрать. Писал автору https://github.com/gosha20777/keras2cpp/issues/16 но он отвечать не торопится. ...
C++ Полиморфизм в C++ Предположим, что есть родительский класс Parent с виртуальным методом update с одним целочисленным аргументом. Есть также унаследованный от этого класса класс Child, у которого есть метод с таким же... https://www.cyberforum.ru/ cpp-beginners/ thread2491738.html C++ Std::stringstream Добрый день! Я не понимаю почему я ввожу в поток std::stringstream три элемента, число, строку и число. Почему цикл выполняется 4 раза и строка "asd" выводится дважды? в середине и в самом конце?... https://www.cyberforum.ru/ cpp-beginners/ thread2491728.html
C++ Auto И шаблоны
Что уместнее было бы использовать из двух вариантов? Или нет разницы? void foo(auto a, auto b) { std::cout << a << b; } //или это template <class a>; void foo(a a1, a a2)
C++ Вызвано исключение: нарушение доступа для чтения. **pline** было 0x1C47112 https://www.cyberforum.ru/ cpp-beginners/ thread2491657.html
Здравствуйте! Хотелось бы обратиться со следующей проблемой. "Вызвано исключение: нарушение доступа для чтения. **pline** было 0x1C47112". Пыталась найти решение в Гугле, но для моего конкретного...
C++ Случайным образом сгенерировать массив символов алфавита https://www.cyberforum.ru/ cpp-beginners/ thread2491637.html
Добрый день! Необходимо поместить случайный символ алфавита в каждый элемент массива char, причем: Нельзя заменить элемент самим собой, т. е. первой не может быть буква A; Нельзя использовать...
C++ Заменить строчные латинские гласные буквы на заглавные
Построить программу, выводящую на экран введенную с клавиатуры строку, предварительно заменив строчные латинские гласные буквы на заглавные
C++ Как пропускать каждые 3 элемента Есть цикл отображения картинок, так как мне влом было высчитывать позиции на несколько строк вниз, я ограничился 2мя for (int i = rg; i <= rg2; i++) { if (i <= 3 || i >= 7 &&... https://www.cyberforum.ru/ cpp-beginners/ thread2491578.html C++ Написать процедуру, которая ищет первых N максимальных чисел из массива https://www.cyberforum.ru/ cpp-beginners/ thread2491511.html
Сформировать меню вызова функций данной практики по их номеру через switch конструкцию. Результатом выхода из меню является ввод нуля: 1.Написать процедуру, которая ищет первых N максимальных...
C++ Как создать многопоточность
Здравствуйте, Пытаюсь хотя бы на самом простом уровне понять, как работает std thread, для этого сделал вот такую простенькую задачку: То есть, имеется одномерный вектор с числами. Нужно...
C++ Оператор new работает не так как пишут и рассказывают в интернете Добрый день! Недавно начал изучать с++, но напоролся на что-то не понятное. Все пишут что объявление динамического массива "type *name_arr = new type", но у меня выдает перегрузку. Можете пожалуйста... https://www.cyberforum.ru/ cpp-beginners/ thread2491470.html
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,276
Записей в блоге: 16
17.08.2019, 12:09 0

Как метод класса возвращает обьект, который является одним из полей данного класса? - C++ - Ответ 13775608

17.08.2019, 12:09. Показов 2849. Ответов 5
Метки (Все метки)

Лучший ответ Сообщение было отмечено KRC как решение

Решение

Цитата Сообщение от KRC Посмотреть сообщение
Так вот поясните, почему-то я раньше не сталкивался с тем, что return возвращает копии... как это работает, по полочкам?
Заранее спасибо!
KRC, по полочкам - в книгах. А тут без RVO и move семантики, и так придётся кое-что написать. Когда в функции создаётся локальный объект, то функция не может вернуть ни этот объект ни указатель ни ссылку на него. Это потому, что при схлопывании области стека (рабочей области) всё будет уничтожено. Поэтому для возврата значения предусмотрен механизм, который реализуется копированием локального объекта в объект заготовленный для этого в месте вызова функции.
Для поля класса можно сделать возврат как по ссылке так и по указателю, поскольку время жизни поля определено временем жизни его объекта и не зависит от работы стека по вызову и завершению работы метода. Поля объектов находятся в области объекта и доступны методу, но механизм стека для конкретного метода к ним не относится. Тем не менее, если использован возврат по значению, то работает копирующий механизм (см. выше). Это в 2-х словах. Если где-то не был корректен, - меня поправят.

Добавлено через 24 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
Поля объектов находятся в области объекта и доступны методу, но механизм стека для конкретного метода к ним не относится.
Тут уместно было бы конкретизировать. Любой метод имеет скрытый параметр - указатель на объект для которого вызывается (this). То есть, доступ для модификации полей у него полон. Но главное, время жизни объекта и его полей не связаны со стеком метода. А при возврате значения - работает механизм копирования. Так же работает возврат по значению объекта принятого по ссылке, например:
C++
1
2
3
4
A foo(A& a)
{
return a;
}


Вернуться к обсуждению:
Как метод класса возвращает обьект, который является одним из полей данного класса? C++
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2019, 12:09
Готовые ответы и решения:

Как получить значение из метода класса, если метод возвращает указатель?
Всем привет. Как получить значение из метода класса, если метод возвращает указатель? Вот тут я...

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: ...

Как получить доступ к методам класса, который содержится в векторе класса
Пишу дерево с любым количеством наследников. В классе Thread содержится вектор классов Thread. При...

Как задать размер массива, который является членом класса, через конструктор?
Почему так? И как же тогда задать размер этого массива? class Test { public: Test(int...

5
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2019, 12:09

Серилизация класса, одним из полей которого является изображение
Есть некий класс, который нужно записывать в поток и обратно доставать. public class...

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

Получить константу из экземпляра класса, который является членом другого класса
class test { const STATUS = 1; } $a = new test(); echo $a::STATUS . PHP_EOL; // работает ...

Как правильно создать массив объектов текущего класса в методе данного класса?
Привет! Ставится задача создания метода, который формирует массив объектов. Правильно ли делать...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.