Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
McToNy
0 / 0 / 0
Регистрация: 29.05.2012
Сообщений: 20
#1

перегрузка в с++ - C++

17.12.2012, 20:24. Просмотров 328. Ответов 8
Метки нет (Все метки)

Помогите нужно очень срочно!недавно писал о перегрузке
есть перегрузка постфиксного инкремента

C++
1
2
3
4
Rectang & operator ++(int)
{height++;
width++;
return *this;}
изменяя на

C++
1
2
3
4
void operator ++(int)
{height++;
width++;
}
не будет к примеру компилироваться (r++)++
где r произвольный объект

нужно показать, написав код в несколько строчек через вызов операторных функций, что (r++)++ не скомпилируется (задание дал преподаватель, я что-то не пойму что делать)

написавшему правильный ответ 100 на мобильник обещаю!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2012, 20:24     перегрузка в с++
Посмотрите здесь:

C++ перегрузка <<, >>, []
Перегрузка << C++
C++ Перегрузка
C++ Перегрузка << и >>
Перегрузка C++
C++ Перегрузка
C++ перегрузка []
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
David Sylva
 Аватар для David Sylva
1283 / 945 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
17.12.2012, 20:30     перегрузка в с++ #2
Цитата Сообщение от McToNy Посмотреть сообщение
написавшему правильный ответ 100 на мобильник обещаю!
За деньги в другом разделе, решают. По заданию не понял, что надо показать?
McToNy
0 / 0 / 0
Регистрация: 29.05.2012
Сообщений: 20
17.12.2012, 21:17  [ТС]     перегрузка в с++ #3
что (r++)++ не скомпилируется, честно говоря сам не очень понял вопрос, нужно похоже задать произвольный объект r и показать что конструкция r++++ не скомпилируется, если оператор++ будет возвращать void

Добавлено через 2 минуты
знаю,что это что-то элементарное,код в несколько строчек
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
17.12.2012, 22:09     перегрузка в с++ #4
C++
1
2
3
4
void operator ++(int)
{height++;
width++;
}
более того этот код уже не скомпилируется) Вот вы представьте...применяете к объекту типа int оператор ++ и результат работы оператора будет void...какая то чушь...а как это показать? Да просто вставьте такой код в IDE и при компиляции покажите ошибки, которые появятся.
Ну и вот http://habrahabr.ru/post/132014/
McToNy
0 / 0 / 0
Регистрация: 29.05.2012
Сообщений: 20
17.12.2012, 23:40  [ТС]     перегрузка в с++ #5
Smetanka, ну это так препод написал, изменил мою программу.
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
18.12.2012, 06:14     перегрузка в с++ #6
McToNy, Да я понимаю, ах эти преподы))) Просто я к чему клоню.
раз это
C++
1
2
3
4
void operator ++(int)
{height++;
width++;
}
уже заранее неверная конструкция, то и программа с такой конструкцией даже не соберется.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
18.12.2012, 08:06     перегрузка в с++ #7
Цитата Сообщение от Smetanka Посмотреть сообщение
void operator ++(int)
{height++;
width++;}
уже заранее неверная конструкция,
Синтаксически-то она верная, скомпилируется нормально, в зависимости от того, как использовать.

McToNy, ну вот смотри. Если инкремент перегрузить по правилам.

Кликните здесь для просмотра всего текста
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <cstdlib>
using namespace std;
 
class Rectangle
{
public:
    Rectangle(int w, int h)
        :height(h), width(w)
    {};
    
    Rectangle & operator ++(int)
    {
        height++;
        width++;
        return *this;
    }
    
    int get_height() {return height;}
    int get_width() {return width;}
private:
    int height;
    int width;
};
 
 
int main()
{
    Rectangle r(10, 20);
    
    // нормальный вызов
    // сначала выполнится инкремент внутри скобок
    // он вернет ссылку на r
    // потом к ней будет применен второй инкремент
    (r++)++;
  
    // итого значения увеличились на 2
    cout << r.get_height() << " : " << r.get_width() << "\n";
    return 0;
}


А если сделать возвращаемым типом void, то вот такая конструкция будет выполняться нормально: r++. Но к ней второй инкремент уже применить нельзя: (r++)++ - ошибка
Кликните здесь для просмотра всего текста
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
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <cstdlib>
using namespace std;
 
class Rectangle
{
public:
    Rectangle(int w, int h)
        :height(h), width(w)
    {};
    void operator ++(int)
    {
        height++;
        width++;
    }
    
    
    int get_height() {return height;}
    int get_width() {return width;}
private:
    int height;
    int width;
};
 
 
int main()
{
    Rectangle r(10, 20);
    
    // ошибочный вызов
    // сначала должен бы выполниться инкремент внутри скобок (r++)
    // но он будет возвращать void 
    // а для типа void не определен инкремент
    (r++)++;
  
    cout << r.get_height() << " : " << r.get_width() << "\n";
    return 0;
}
McToNy
0 / 0 / 0
Регистрация: 29.05.2012
Сообщений: 20
18.12.2012, 09:23  [ТС]     перегрузка в с++ #8
Schizorb спасибо большое,скинь номер,завтра покажу преподу,если верно будет то кину денег
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 09:25     перегрузка в с++
Еще ссылки по теме:

перегрузка [] C++
C++ Перегрузка +
C++ перегрузка
С++. Перегрузка C++
перегрузка [] C++

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

Или воспользуйтесь поиском по форуму:
Schizorb
18.12.2012, 09:25     перегрузка в с++
  #9

Не по теме:

Не по теме:

Цитата Сообщение от McToNy Посмотреть сообщение
если верно будет то кину денег
та забей))

Yandex
Объявления
18.12.2012, 09:25     перегрузка в с++
Ответ Создать тему
Опции темы

Текущее время: 23:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru