Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
#1

Непонятны некоторые операторы - C++

03.05.2012, 23:03. Просмотров 1247. Ответов 21
Метки нет (Все метки)

Читал, читай книгу по C++. Что понял что нет. Пожалуйста помогите с такими вопросами:
- Для чего нужна операция "?:" ?, я этого не понял.
- пожалуйста обьясните русским языком что такое перегрузка операции... Ничего не понял по этому поводу.
-пожалуйста обьясните про работу операций New и Delete и чем они отличаются от обычного обьявиения переменной?
Пишите не стесняйтесь, буду рад абсолютно любому ответу, главное правильному.
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2012, 23:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Непонятны некоторые операторы (C++):

Непонятны некоторые функции - C++
Непонятны следующие функции, что они выполняют: (char)((int)('a')+j)) break; // что значит эта запись? char PROC(char s) // почему...

Шейкер Сортировка! Непонятны некоторые моменты - C++
Столкнулся с задачей реализации Шейкер сортировки .Почитал теорию и понял , что она очень похожа на пузырьковую. Но столкнулся с примером...

Не работает swap и непонятны некоторые строки в программе - C++
Нужно что бы swap менял слова равноудаленные от концов строки, то есть первое с последним, второе с предпоследним и так далее, еще...

Создать класс "Триада" и перегрузить некоторые операторы - C++
1) Создать базовый класс "Триада" (три числа). Определить методы: конструктор, виртуальные функции увеличения полей на 1 и вывода...

С++.Операторы в С++: условные операторы, операторы break и continue - C++
Выяснить, пересекаются ли параболы у=аx2+bx+с и у=dx2+ex + f. При положительном ответе найти точки пересечения.

Непонятны функции - C++
Или ссылку на нее..

21
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
03.05.2012, 23:13 #2
- Для чего нужна операция "?:" ?, я этого не понял.
Это тернарный оператор - http://ru.wikipedia.org/wiki/%D0%A2%...86%D0%B8%D1%8F

Добавлено через 1 минуту
Цитата Сообщение от No10 Посмотреть сообщение
- пожалуйста обьясните русским языком что такое перегрузка операции
Это когда функция/член класса с одним и тем же именем принимает и возвращает разные типы и их количество (для каждой перегрузки определяется своя функция/член класса)

Добавлено через 4 минуты
Цитата Сообщение от No10 Посмотреть сообщение
- пожалуйста обьясните про работу операций New и Delete и чем они отличаются от обычного обьявиения переменной?
Это операции для динамического управления памятью. С их помощью можно выделить память как для одной переменной, так и для нескольких сотен/тысяч/миллионов/миллиардов переменных.
0
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
04.05.2012, 03:28 #3
Цитата Сообщение от lazybiz Посмотреть сообщение
Это когда функция/член класса с одним и тем же именем принимает и возвращает разные типы и их количество
Возвращаемый тип в перегрузке не участвует, только имя и типы параметров, т.е. такой код приведёт к ошибке:
C++
1
2
void f();
double f();
0
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
04.05.2012, 06:41  [ТС] #4
блин, вы ответили как в книге.
Обьясните что такое перегруз операции? А то по вашему обьяснения я понял что это очень похоже на шаблон функции. И функция может принимать любые типы данных... В общем я окончательно запутался просто капец. Вообще каша какаято.0_о. Обьясните мне это как новичку, как вы это поймаете а не как в книге написано. Что New и Delete это динамическое распредиление памяти я прекрасно знаю. Я не могу понять почему именно оно динамичное и чем это отличается от обьявиения обычных переменных? А по поводу знака "?:"- тернарный оператор... Стало еще "понятней". Что значит тернарный?
0
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 240
04.05.2012, 08:37 #5
C++
1
2
int a = 2, b = 4;
int c = (a>b)?a:b;
Принцип работы: проверяется условие до "?" - если оно верно (в данном случае нет, ибо a не больше b), то выполняется код до ":", а если условие ложно - выполняется то, что стоит после ":" (в данном случае условие ложно и выполнится код c = b - можно запустить программу и посмотреть: c = 4. Кстати, если условие ложно, то на код, стоящий перед ":" и после "?", не обращается внимания при выполнении - его как бы нет; и наоборот: если бы условие было бы истинным, то код после ":" игнорился бы. ).

Тернарный оператор - оператор, который выполняет действия с 3-мя переменными.
2
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
04.05.2012, 08:39 #6
Цитата Сообщение от No10 Посмотреть сообщение
Обьясните что такое перегруз операции?
Две разных функции могут иметь одинаковое имя, тогда они называются перегруженными. Например:
C++
1
2
3
4
5
6
7
8
9
10
void foo(int x) {
}
 
void foo(const std::string &x) {
}
 
int main() {
    foo(5);
    foo("string");  
}
Две разных функции с одинаковым именем. Компилятор сам выберет подходящую.
Цитата Сообщение от No10 Посмотреть сообщение
Что значит тернарный?
Операции бывают унарные, бинарные и тернарные. Унарный имеют один аргумент, например инкремент или унарный минус. Бинарные - два аргумента, например арифметические сложение/умножение/деление и т.д. И, наконец, тернарные имеют три аргумента (Условие ? Выражение 1 : Выражение 2). Грубо говоря тернарный оператор это некий аналог конструкции if-else, за исключением того, что if-else это не оператор.
Код
if (Условие)
	Выражение 1
else
	Выражение 2
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.05.2012, 10:38 #7
Что New и Delete это динамическое распредиление памяти я прекрасно знаю. Я не могу понять почему именно оно динамичное и чем это отличается от обьявиения обычных переменных?
Что значит чем? В программе нужно создать массив интов из n элементов, n к примеру вводится с клавиатуры. Написать int a[n] мы не можем (ну точнее в С99 можем, но мы же сейчас о С++), поэтому, чтобы создать массив из n элементов пишем int* a = new int[n], теперь а указатель на начало массива из n элементов. delete[] a - очистит память выделенную под этот массив в куче.
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.05.2012, 10:52 #8
Цитата Сообщение от No10 Посмотреть сообщение
это очень похоже на шаблон функции
Не, шаблоны функций посложнее будут.
Для примера, попробуйте сказать без компилятора, какая надпись выведется на экран в результате исполнения этой программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
template < class T >
void foo( T )
{
    std::cout << "first";
}
 
template < class T >
void foo( T* )
{
    std::cout << "second";
}
 
template < class T >
void foo( int * )
{
    std::cout << "third";
}
 
 
int main()
{
    int *x;
    foo(x);
}
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
04.05.2012, 11:42 #9
Цитата Сообщение от gray_fox Посмотреть сообщение
Возвращаемый тип в перегрузке не участвует, только имя и типы параметров
Да что ты говоришь. А почему нижеприведенный код у меня отлично работает?
C++
1
2
3
4
5
6
7
8
9
int test()
{
    return a;
}
 
void test( int v )
{
    a = v;
}
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.05.2012, 11:46 #10
Цитата Сообщение от lazybiz Посмотреть сообщение
Да что ты говоришь. А почему нижеприведенный код у меня отлично работает?
Потому что первая функция принимает void, т.е. ничего, а вторая - int.
А на типы параметров перегрузка распространяется...
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
04.05.2012, 11:50 #11
diagon, Я это прекрасно понимаю, мне это не надо объяснять. Объясни это тому кто сказал что "Возвращаемый тип в перегрузке не участвует"
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
04.05.2012, 11:51 #12
Правильно он все сказал.
C++
1
2
int foo();
void foo();
Такое не скомпилируется, ибо различаются только типы возвращаемых значений
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.05.2012, 11:52 #13
lazybiz, Возвращаемый тип не учавствует. Именно поэтому вы получите ошибку при попытке сделать

C++
1
2
3
4
5
6
7
void func() { }
bool func() { }
 
int main()
{
   func();
}
0
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
04.05.2012, 12:09 #14
Он "не участвует", но перегруженные функции могут возвращать разные значения...
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.05.2012, 12:24 #15
lazybiz, Могут. Никто не говорил, что не могут. Говорили, что возвращаемый тип не участвует.
0
04.05.2012, 12:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2012, 12:24
Привет! Вот еще темы с ответами:

Определить и вывести количество дней между двумя датами (логические операторы и операторы ветвлений) - C++
Задачка Пользователь вводит две даты (день, месяц, год в виде целых чисел). Необходимо определить и вывести количество дней между этими...

Операторы присваивания, ввода- вывода. Операторы ветвления, выбора - C++
Даны два ненулевых числа. Найти их сумму, разность, произведение, частное, остаток и целую часть от деления. Добавлено через 8 часов...

«Языки и технологии программирования» «Операторы цикла. Условные операторы» - C++
Не получается сделать что бы программа выводила все значения в промежутке, она выводит только одно. условия | ((z^3)+sin...

Операторы языка С++: операторы цикла (исправьте программу) - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; using namespace std; int main() { int a,n; float y,x; cout&lt;&lt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.