32 / 30 / 4
Регистрация: 03.06.2010
Сообщений: 465
|
|
1 | |
Непонятны некоторые операторы03.05.2012, 23:03. Показов 2014. Ответов 21
Метки нет (Все метки)
Читал, читай книгу по C++. Что понял что нет. Пожалуйста помогите с такими вопросами:
- Для чего нужна операция "?:" ?, я этого не понял. - пожалуйста обьясните русским языком что такое перегрузка операции... Ничего не понял по этому поводу. -пожалуйста обьясните про работу операций New и Delete и чем они отличаются от обычного обьявиения переменной? Пишите не стесняйтесь, буду рад абсолютно любому ответу, главное правильному. Заранее спасибо!
0
|
03.05.2012, 23:03 | |
Ответы с готовыми решениями:
21
Непонятны некоторые функции Шейкер Сортировка! Непонятны некоторые моменты Не работает swap и непонятны некоторые строки в программе Создать класс "Триада" и перегрузить некоторые операторы |
03.05.2012, 23:13 | 2 |
Добавлено через 1 минуту Это когда функция/член класса с одним и тем же именем принимает и возвращает разные типы и их количество (для каждой перегрузки определяется своя функция/член класса) Добавлено через 4 минуты Это операции для динамического управления памятью. С их помощью можно выделить память как для одной переменной, так и для нескольких сотен/тысяч/миллионов/миллиардов переменных.
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
||||||
04.05.2012, 03:28 | 3 | |||||
Возвращаемый тип в перегрузке не участвует, только имя и типы параметров, т.е. такой код приведёт к ошибке:
0
|
32 / 30 / 4
Регистрация: 03.06.2010
Сообщений: 465
|
|
04.05.2012, 06:41 [ТС] | 4 |
блин, вы ответили как в книге.
Обьясните что такое перегруз операции? А то по вашему обьяснения я понял что это очень похоже на шаблон функции. И функция может принимать любые типы данных... В общем я окончательно запутался просто капец. Вообще каша какаято.0_о. Обьясните мне это как новичку, как вы это поймаете а не как в книге написано. Что New и Delete это динамическое распредиление памяти я прекрасно знаю. Я не могу понять почему именно оно динамичное и чем это отличается от обьявиения обычных переменных? А по поводу знака "?:"- тернарный оператор... Стало еще "понятней". Что значит тернарный?
0
|
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
|
||||||
04.05.2012, 08:37 | 5 | |||||
Тернарный оператор - оператор, который выполняет действия с 3-мя переменными.
2
|
04.05.2012, 08:39 | 6 | |||||
Две разных функции могут иметь одинаковое имя, тогда они называются перегруженными. Например:
Операции бывают унарные, бинарные и тернарные. Унарный имеют один аргумент, например инкремент или унарный минус. Бинарные - два аргумента, например арифметические сложение/умножение/деление и т.д. И, наконец, тернарные имеют три аргумента (Условие ? Выражение 1 : Выражение 2). Грубо говоря тернарный оператор это некий аналог конструкции if-else, за исключением того, что if-else это не оператор. Код
if (Условие) Выражение 1 else Выражение 2
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
04.05.2012, 10:38 | 7 |
0
|
Higher
|
||||||
04.05.2012, 10:52 | 8 | |||||
Не, шаблоны функций посложнее будут.
Для примера, попробуйте сказать без компилятора, какая надпись выведется на экран в результате исполнения этой программы:
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
04.05.2012, 11:52 | 13 | |||||
lazybiz, Возвращаемый тип не учавствует. Именно поэтому вы получите ошибку при попытке сделать
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
04.05.2012, 12:24 | 15 |
lazybiz, Могут. Никто не говорил, что не могут. Говорили, что возвращаемый тип не участвует.
0
|
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
|
||||||||||||||||
04.05.2012, 14:20 | 16 | |||||||||||||||
Это конструкция if-then-else(или тернарный оператор, как уже было сказано выше). Например, результатом выражения a < b ? "a < b" : "a >= b" будет строка "a < b", если a < b, и "a >= b" в противном случае. Используется это в основном при инициализации объектов. Например, есть у нас такой класс
1)
перегрузка операции(оператора) это назначение встроенному оператору C++ определённого поведения при использовании его с пользовательскими типами(классами). Например, выше для класса some_class перегружен оператор присваивания(operator = ). Т.е. определена специальная функция, которая будет вызвана при попытке присвоить объекту типа some_class значение переменной типа const char*(в нашем случае это просто вывод сообщения на экран). Для каждого типа, который будет стоять справа от оператора присваивания можно определить свою функцию. В отличии от простых функций операторы можно перегружать только по типу параметров. Подробнее обо всём этом можно прочесть в любой книге по C++. http://www.rsdn.ru/article/cpp... inters.xml
1
|
32 / 30 / 4
Регистрация: 03.06.2010
Сообщений: 465
|
|
04.05.2012, 20:24 [ТС] | 17 |
diagon, выведется third. Я без компилятора. Потому что функция foo принимает указатель на int в не на T. Если я не прав, обьясни почему и поподробней если сможешь)
0
|
Заблокирован
|
|
04.05.2012, 21:36 | 18 |
Когда компиль встречает вызов функции, ему нужно понять: какую именно функцию дернуть.
Он начинает анализировать сигнатуру функций, в которую входят имя функции, и типы её аргументов. Это не тривиальный затратный процесс. Назовем его "конкурсом". "Конкурс" имеет "ленивую" природу. Что бы сократить время на парсинг, все, что можно не делать - не делается. Поэтому, сначала анализируются самые простые претенденты - обычные функции. И только потом - шаблоны функций. Связанно это с тем, что у шаблонов как таковых типов аргументов может и не оказаться (и чаще всего так и получается). Компиль выводит все типы из параметров шаблона. Поэтому, среди претендентов первыми анализируются те шаблоны функции, у которых можно быстрее вывести тип аргумента. И если среди них претендент не найден, только в самую последнюю очередь производится полный вывод типов из всех остальных. Итого: 3й вариант (не проверял, но я так думаю(!) ) Потому что у этого шаблона аргумент из параметра шаблона выводить не нужно.
0
|
Higher
|
||||||
05.05.2012, 08:55 | 19 | |||||
http://liveworkspace.org/code/... d769fbbb77
Добавлено через 8 минут И еще один вариант кода
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
05.05.2012, 12:16 | 20 |
diagon, Ну там то понятно что второй. Тут третий. Т.к. в том случае функция которая принимает int* обязана так же принять шаблонный параметр, а т.к. мы не передаем шаблонный параметр, то эта функция в выборе просто не учавствует. А в этом третий, потому как уже объяснил Bers.
0
|
05.05.2012, 12:16 | |
05.05.2012, 12:16 | |
Помогаю со студенческими работами здесь
20
С++.Операторы в С++: условные операторы, операторы break и continue Непонятны функции Непонятны алгоритмы программ Непонятны разные функции библиотеки cctype Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |