С++. Где-то сверху описан класс mClass(int data){•••}. Функция создается как : mClass Func() { mClass temp(2); return temp; } И в главной функции идет просто вызов Func(); Вопрос. Что происходит?)) Ну типа верно ли я понимаю, что при вызове функции, в ней создается обьект класса, и потом он возвращается в int main(), где функцию вызвали. Потерял просто нить зачем делать так и почему тип функции обьявлен как названия класса. Тормознул немного. Чего хочу от вас? Сам не знаю, мне бы понять почему именно так обьявленная функция, а не как-то по другому. Если может кто обьяснить, буду благодарен.

Комментарии: 17

  1. Choipinming

    mClass(int data) {} - конструктор класса. То есть функция которая зовется для того чтобы инициазировать структуру , коей этот класс является . mClass temp(2); создает в памяти на стеке объект класса mClass и вызывает для него функцию - конструктор с аргументом 2 потом через return этот класс выдается наверх просящему. вызов Func() ниже никак не юзает результаты того что он создал объект класса

    • Teegeron

      Эт понятно) Не понятно инициализация типа функции. Это из-за того,что бы она могла вернуть обьект класса? Если по аналогии с int func(){} может вернуть переменную типа инт, значит что бы вернуть обьект класса, нужно инициализировать функцию с типом как название класса? Или это будет верно назвать не тип как название класса.А функцию класса. Или нет.Или бля.

      • Choipinming

        Для классов в с++ есть такое понятие дефолтный конструктор - это функция которая вызывается для инициализации объекта этого класса без агрументов someClass a1; <- это объявление приводит к неявному вызову дефолтного конструктора или someClass() - то есть без агрументов если в классе описывается конструктор с аргументами , то дефолтный конструктор становится запрещен. Ты как бы обязан выбрать способ инициализации из тех что реально перечислены в классе

        • Teegeron

          И это я знаю..

          • Choipinming

            Ну тогда ты знаешь достаточно чтоб ответить на свой вопрос)

          • Teegeron

            Я просто пытаюсь понять чего там mClass Func() Именно чего mClass. И уточняю, верно ли я сужу вот здесь Эт понятно) Не понятно инициализация типа функции. Это из-за того,что бы она могла вернуть обьект класса? Если по аналогии с int func(){} может вернуть переменную типа инт, значит что бы вернуть обьект класса, нужно инициализировать функцию с типом как название класса? Или это будет верно назвать не тип как название класса.А функцию класса. Или нет.Или бля.

            • Choipinming

              где ты видишь инициализацию типа функции? Записть "mClass Func()" означает всего лишь объявление сигнатуры функции которую там описывают mClass - тип возвращаемого значения, Func - имя функции, () <- без аргументов

              • Teegeron

                Воот, это и нужно было понять.) Пасиба. Я только начал вьезжать в классы, и для меня была дикая такая запись

                • Choipinming

                  > mClass - тип возвращаемого значения, Func - имя функции, () <- без аргументов Ну то есть чтоб вернуть объект такого типа функция Func внутри себя его сначала создает а потом возвращает Но чтоб это сработало - сразу же нужно чтоб был описан copy constuctor

                  • Teegeron

                    Как раз эта часть кода с видео-обучалки про конструктор копирования.

                    • Choipinming

                      потому что если ты переопределил конструктор класса - то дефолтный конструктор и дефолтный копиконструктор для него слетел - их надо определить и еще парочка вещей слетала

                      • Teegeron

                        Мм.Да вроде дефолтный копи не слетает при определении обычного конструктора Я вообще пока что все что понимаю, что копи нужет только в случае работы с динамической памятью. Точнее НЕ дефолтный копи конструктор нужен тогда, тогда с ней работаешь, в остальных обычных случаях достаточно не описывать копи, дабы сработал копи-дефолтный

        • Andrey

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

          • Teegeron

            Если ты опишешь всего 1 конструктор, то нет.Если опишешь второй, без аргументов, то это будет перегрузка конструктора и да, так можно сделать

            • Andrey

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

              • Teegeron

                Да, они будут вызываться в связи с параметрами, которые ты передаешь. То есть, если ты создашь обьект без параметра, для него прописан конструктор, то автоматически для этого обьекта сработает он.Если будет второй с параметрами, и ты создашь с параметрами обьект, то автоматически тебе сработает второй конструктор с параметрами

                • Andrey

                  теперь я просветлен еще более. спасибо.

Не нашли ответ?

Вам также может быть интересно