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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ SHA-1 http://www.cyberforum.ru/cpp-beginners/thread735724.html
Нужен алгоритм нормальный или прога по хешированию sha-1, если кто делал и кому нежалко. Уже 2 мучаюсь. Сделал сам, а результаты не сходятся Добавлено через 3 часа 7 минут Славая яйцам, я сделал. Нашел полезный документ под названием fips180- 1 2 3
C++ Вопр0сы по функциям в С++ , Функции , Параметры 1) Что такое тип функции ? 2)Какие типы функций бывают ? 3)Как осуществляется вызов , и выход из функции ? 4) Что такое передача параметров функции по имени? 5) Как происходит преобразование типов параметров при их совпадении ? Если я даже представляю что это из себя представляет ,то объяснить ну ни как не могу) А гугл вечно не то подсовывает. Просто важная контрольная , а время жмёт... http://www.cyberforum.ru/cpp-beginners/thread735715.html
C++ Считывание getline()
По идее эта программа должна с помощью функции getline() считывать строки текстового файла и проверять, является ли записанное в каждой строке выражение палиндромом. Программа работает, но как теперь сделать, чтобы строки считывались именно с помощью getline()? #include <string.h> #include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; int main() { int...
C++ Построить в динамической памяти линейный связанный список строкового типа данных
Задание: Построить в динамической памяти линейный связанный список строкового типа данных. Количество элементов списка заранее неизвестно. Список строить в прямом порядке, окончание ввода – введение условного символа. Символ этот в список не включается. Предусмотреть возможность добавления и удаления элемента: пред предпоследнего элемента (в списке больше трех элементов); Есть вот такой вот...
C++ Решение систем линейных уравнений http://www.cyberforum.ru/cpp-beginners/thread735701.html
Решить СЛУ \begin{cases} & \text{1.2x+2.4y-3.8z=\alpha } \\ & \text{-7x-1.3y=1.27 } \\ & \text{3.3x+0.3y-5z=5.82 } \end{cases} \alpha = \int_{0.55}^{1.27}arctg\frac{sint}{t}dt Результаты представить в виде таблицы. Добавлено через 1 минуту вверх
C++ Сортировка массива Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик. #include <vc.h> #include <iostream.h> #include <conio.h> #include <time.h> #pragma hdrstop #pragma argsused void main() { подробнее

Показать сообщение отдельно
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
18.12.2012, 08:06     перегрузка в с++
Цитата Сообщение от 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;
}
 
Текущее время: 18:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru