Базовый ООП
- Видео до
NumberWrapper. - Информация
Базовые концепты
Заголовок раздела «Базовые концепты»-
Что такое метод?
Ответ
Метод это функция, определенная внутри структуры (класса). -
Что такое “функция-член”?
Ответ
Это синоним для слова метод. -
Что такое член класса?
Ответ
Методы, поля. (А также конструкторы и деструкторы, но это позже.) -
Чем отличается instance функция (функция-экземпляр) от статической?
Линкер
staticдля методов не связан соstaticдля линкера. Не путайте их.Ответ
Instance функции принимают скрытый параметр
this- указатель на объект. -
Какой синтаксис вызова методов?
Ответ
Instance методы могут быть вызваны только используя member access синтаксис
obj.action(parameter), что передает&objкак скрытый параметрthis(еслиobjэто указатель, допустим синтаксисobj->action(parameter)).Статические методы можно вызвать через
obj.action(parameter)или какObject::action(parameter)(Object- это тип переменной obj). Скрытыйthisне существует для них, поэтому он не передастся. -
Как только объявить метод, а определить его отдельно?
Ответ
Объявить метод можно так же, как обычную функцию.
class Hello{static void world();}Определить можно либо сразу на месте, либо определив ее как
void Hello::world()class Hello{static void world();}// ...void Hello::world(){std::cout << "Hello" << std::endl;}Такой же синтаксис и с instance методами.
-
Возможно ли определить метод внутри класса, который будет статический для линкера (определен только для текущего compilation unit-a)?
Ответ
Один конкретный — нельзя. Можно все методы в классе, приписав
staticк определению класса. Некоторым образом это можно обойти, используя вложенный класс. См. док. -
Обязателен ли оператор
newчтобы создать класс (структуру с методами)?Ответ
Нет. Классы можно встроить в стек, как и обычные стркутуры без методов. -
Влияет ли количество методов класса на то сколько байт будет занимать объект типа этого класса?
Ответ
Нет. Методы привязаны к самому типу, а не к конкретному объекту. Сами инструкции из методов будут занимать память, но отдельную, чем память объекта. -
Занимает ли объект с одним методом больше памяти, чем объект без методов?
Ответ
Нет, если методы не виртуальные. Про виртуальные методы будет в теме с полиморфизмом.
Вы можете проверить сколько памяти занимает любой объект, используя
sizeof. -
В чем функциональное преимущество использование методов вместо обычных функций, принимающих параметр, подобный параметру
this, не скрытно, первым параметром.Ответ
Функционально, то есть, в плане того что произойдет при выполнении программы, разницы нет. Поэтому, правильный ответ - никакого функционального преимущества методы не имеют.Методы имеют преимущество в плане структурирования кода: если все операции с данными какого-то типа определены внутри определения типа, их просто проще найти.
Также, ООП дает возможность осуществлять инкапсулирование данных, что труднее осуществить в типичном процедуральном программировании.