какие утверждения верны относительно элементов класса объявленных спецификацией const
1)Сколько указателей могут указывать на один объект в рамках функции main?
Выберите один ответ:
a. Один
b. Ну, хорошо, три
c. Два
d. Сколько угодно
e. Указатель не для этого предназначен, он указывает на переменную базовог
2)Какое ограничение на количество параметризированных конструкторов в описании класса?
Выберите один ответ:
a. На количество параметризированных конструкторов в описании класса ограничений нет.
b. В описании класса допустимы только конструкторы по умолчанию и конструктор копии.
c. Параметризированных конструкторов в описании класса не должно быть.
d. Параметризированных конструкторов может быть не более десяти.
3)Какое наименование раздела можно явно не указывать в описании класса?
Выберите один ответ:
a. protected
b. public
c. private
4)Какие утверждения верны относительно возвращаемого значения функции?
Выберите один или несколько ответов:
a. Объект возвращается с помощью обычной инструкции return.
b. Возвращаемый объект всегда имеет спецификацию const.
c. Объект может быть в качестве возвращаемого значения функций.
d. Объект не может быть в качестве возвращаемого значения метода.
5)Какие утверждения верны, когда базовый класс наследуется по спецификатору public?
Выберите один или несколько ответов:
a. Закрытые элементы базового класса становятся закрытыми в производном.
b. Защищенные элементы базового класса становятся открытыми в производном классе.
c. Закрытые элементы базового класса становятся защищенными в производном.
d. Защищенные элементы базового класса становятся защищенными в производном классе.
e. Открытые элементы базового класса становятся открытыми в производном классе.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Многоликий const
Ключевое слово const — одно из самых многозначных в C++. Правильно использование const позволяет организовать множество проверок ещё на этапе компиляции и избежать многих ошибок из числа тех, которые бывает трудно найти при помощи отладчиков и/или анализа кода.
Первая половина заметки рассчитана скорее на начинающих (надеюсь мнемоническое правило поможет вам запомнить, где и для чего используется const), но, возможно, и опытные программисты смогут почерпнуть интересную информацию о перегрузке методов по const.
Константы и данные
Самый простой случай — константные данные. Возможно несколько вариантов записи:
Все они правильные и делают одно и тоже — создают переменную, значение которой изменить нельзя.
Константы и указатели
При использовании const с указателями, действие модификатора может распространяться либо на значение указателя, либо на данные на которые указывает указатель.
Работает (const относится к данным):
Тоже самое и тоже работает:
А вот это уже не работает:
Если бы операция присвоения изменяла бы не указатель, а данные:
то ситуация была бы диаметрально противоположной.
Существует мнемоническое правило, позволяющее легко запомнить, к чему относится const. Надо провести черту через «*», если const слева, то оно относится к значению данных; если справа — к значению указателя.
Ну и конечно, const можно написать дважды:
Константы и аргументы/результаты функций
C функциями слово const используется по тем же правилам, что при описании обычных данных.
Константы и методы (перегрузка)
А вот с методами есть одна тонкость.
Во-первых, для методов допустимо использование const, применительно к this. Синтаксис таков:
Кроме того, этот const позволяет перегружать методы. Таким образом, вы можете писать оптимизированные варианты методов для константных объектов.
То есть для константного объекта (с x=2) был вызван соответствующий метод.
Осталось только добавить, что если вы планируете использовать const-объекты, то вам надо обязательно реализовать const-методы. Если вы в этом случае не реализуете не-const-методы, то во всех случаях будут молча использоваться const-методы. Одним словом, const лучше использовать там, где это возможно.
И ещё… я собрался в отпуск… возможно, не смогу ответить на комментарии до понедельника-вторника. Не сочтите за невнимание 🙂
Вопросы по ООП C++
1)Сколько указателей могут указывать на один объект в рамках функции main?
Выберите один ответ:
a. Один
b. Ну, хорошо, три
c. Два
d. Сколько угодно
e. Указатель не для этого предназначен, он указывает на переменную базовог
2)Какое ограничение на количество параметризированных конструкторов в описании класса?
Выберите один ответ:
a. На количество параметризированных конструкторов в описании класса ограничений нет.
b. В описании класса допустимы только конструкторы по умолчанию и конструктор копии.
c. Параметризированных конструкторов в описании класса не должно быть.
d. Параметризированных конструкторов может быть не более десяти.
3)Какое наименование раздела можно явно не указывать в описании класса?
Выберите один ответ:
a. protected
b. public
c. private
4)Какие утверждения верны относительно возвращаемого значения функции?
Выберите один или несколько ответов:
a. Объект возвращается с помощью обычной инструкции return.
b. Возвращаемый объект всегда имеет спецификацию const.
c. Объект может быть в качестве возвращаемого значения функций.
d. Объект не может быть в качестве возвращаемого значения метода.
5)Какие утверждения верны, когда базовый класс наследуется по спецификатору public?
Выберите один или несколько ответов:
a. Закрытые элементы базового класса становятся закрытыми в производном.
b. Защищенные элементы базового класса становятся открытыми в производном классе.
c. Закрытые элементы базового класса становятся защищенными в производном.
d. Защищенные элементы базового класса становятся защищенными в производном классе.
e. Открытые элементы базового класса становятся открытыми в производном классе.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вопросы по ООП С++
1)Правильно ли утверждение: алгоритм решения задачи системой содержит взаимодействия объектов.
вопросы ООП
Есть вопрос. Если кто знает, о чем тут, отпишитесь: «Пример, отражающий четыре способа применения.
ООП. Есть вопросы.
Собственно, обращаюсь к знающим людям, поскольку еще на первых порах с С++ не могу понять.
Когда вопросы кончаются, сделать кнопку неактивной и вывести сообщение о том, что вопросы кончились
Кто знает ребят подскажите в чем проблема, есть метод обновляющий текст в TextView (всего 6.
Урок №123. Классы и const
Обновл. 13 Сен 2021 |
На уроке №37 мы узнали, что фундаментальные типы данных (int, double, char и т.д.) можно сделать константными, используя ключевое слово const, и что все константные переменные должны быть инициализированы во время объявления. В случае с константными фундаментальными типами данных инициализация может быть копирующей, прямой или uniform:
Константные объекты классов
Объекты классов можно сделать константными (используя ключевое слово const). Инициализация выполняется через конструкторы классов:
Как только константный объект класса инициализируется через конструктор, то любая попытка изменить переменные-члены объекта запрещена, так как это нарушает принципы константности объекта. Запрещается как изменение переменных-членов напрямую (если они являются public), так и вызов методов (сеттеров), с помощью которых можно установить значения переменным-членам. Рассмотрим следующий класс:
Строки №16-17 вызовут ошибки компиляции, так как они нарушают принципы константности объекта, пытаясь напрямую изменить переменную-член и вызывая сеттер для изменения значения переменной-члена.
Константные методы классов
Теперь рассмотрим следующую строку кода:
Удивительно, но это также вызовет ошибку компиляции, хотя метод getValue() не делает ничего для изменения переменной-члена! Оказывается, константные объекты класса могут явно вызывать только константные методы класса, а getValue() не указан, как константный метод. Константный метод — это метод, который гарантирует, что не будет изменять объект или вызывать неконстантные методы класса (поскольку они могут изменить объект).
Чтобы сделать getValue() константным, нужно просто добавить ключевое слово const к прототипу функции после списка параметров, но перед телом функции:
Теперь getValue() является константным методом. Это означает, что мы можем вызывать его через любой константный объект.
Для методов, определенных вне тела класса, ключевое слово const должно использоваться как в прототипе функции (в теле класса), так и в определении функции:
Кроме того, любой константный метод, который пытается изменить переменную-член или вызвать неконстантный метод класса, также приведет к ошибке компиляции, например:
Обратите внимание, конструкторы не могут быть константными. Это связано с тем, что они должны иметь возможность инициализировать переменные-члены класса, а константный конструктор этого не может сделать. Следовательно, в языке С++ константные конструкторы запрещены.
Стоит отметить, что константный объект класса может вызывать конструктор, который будет инициализировать все или некоторые переменные-члены, или же не будет их инициализировать вообще!
Правило: Делайте все ваши методы, которые не изменяют данные объекта класса, константными.
Константные ссылки и классы
Еще одним способом создания константных объектов является передача объектов в функцию по константной ссылке.
На уроке №98 мы рассмотрели преимущества передачи аргументов по константной ссылке, нежели по значению. Если вкратце, то передача аргументов по значению создает копию значения (что является медленным процессом). Большую часть времени нам не нужна копия, а ссылка уже указывает на исходный аргумент и является более эффективной, так как избегает создания и использования ненужной копии. Мы обычно делаем ссылку константной для гарантии того, что функция не изменит значение аргумента и сможет работать с r-values (например, с литералами).
Можете ли вы определить, что не так со следующим кодом?
Решение
лично мне кажется «сколько угодно», но проблема в том что нас ограничивает стек, но всё же «Сколько угодно» подходит лучше всех
Добавлено через 30 секунд
Добавлено через 31 минуту
Добавлено через 4 минуты
а) Объект возвращается с помощью обычной инструкции return. (ещё же можно вернуть через изменение параметра по адресу/указателю)
б) Возвращаемый объект всегда имеет спецификацию const. не уверен
в) Объект может быть в качестве возвращаемого значения функций. вроде как может
Вопросы по ООП С++
1)Правильно ли утверждение: алгоритм решения задачи системой содержит взаимодействия объектов.
вопросы ООП
Есть вопрос. Если кто знает, о чем тут, отпишитесь: «Пример, отражающий четыре способа применения.
ООП. Есть вопросы.
Собственно, обращаюсь к знающим людям, поскольку еще на первых порах с С++ не могу понять.
Когда вопросы кончаются, сделать кнопку неактивной и вывести сообщение о том, что вопросы кончились
Кто знает ребят подскажите в чем проблема, есть метод обновляющий текст в TextView (всего 6.
ООП ради ООП
Доброго времени суток! Есть к примеру класс Cat который реализует интерфейс Movable, инкапсулирует.
Вопросы..
Всем добрый день. Пожалуйста подскажите ответы на следующие вопросы, хочу сразу извиниться за свою.
Вопросы по TP
Приветствую всех! Напишите пожалуйста ответы на следующие вопросы: 1) Можно ли как-то.
Вопросы по S.M.A.R.T.
Здравствуйте. Возможно ли сбросить значения S.M.A.R.T. каким-нибудь образом? Недавно попался HDD.
Вопросы
Ребята, никто не писал никогда код на С++, связанный с имитационным моделированием? Просто, дали.