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