Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 29.09.2018
Сообщений: 23
1

Перегрузка оператора потокового вывода

05.10.2019, 14:26. Показов 2685. Ответов 4
Метки нет (Все метки)

Вылетает ошибка о том что слишком много параметров функции (строка 54)
файл.cpp
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
//
//
//  Generated by StarUML(tm) C++ Add-In
//
//  @ Project : Untitled
//  @ File Name : rectangle.h
//  @ Date : 04.10.2019
//  @ Author : 
//
//
 
 
#if !defined(_RECTANGLE_H)
#define _RECTANGLE_H
 
 
class rectangle {
public:
    float height;
    float weight;
 
    float area(float a, float b);
    float perimeter(float a, float b);
    rectangle() // конструктор
    {
        height = 0;
        weight = 0;
    }
    rectangle(float a, float b) // конструктор с параметрами
    {
        height = a;
        weight = b;
    }
    ~rectangle()
    {
        cout << "Вызвался деструктор " << this << endl;
    }
    rectangle(const rectangle& other) // конструктор копирования
    {
        this->height = other.height;
        this->weight = other.weight;
    }
    void operator = (const rectangle& other) // перегрузка оператора "="
    {
        this->height = other.height;
        this->weight = other.weight;
    }
    rectangle& operator ++ () // перегрузка оператора инкремента 
    {
        this->height += 1;
        this->weight += 1;
        return *this;
    }
    ostream& operator<< (ostream& os, const rectangle& point) // перегрузка оператора потокового вывода
    {
        os << point.height << " " << point.weight;
        return os;
    }
};
 
#endif  //_RECTANGLE_H
А здесь (на строке 46) "отсутствует оператор << соответствующий этим операндам"
заголовочный_файл.h
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//
//
//  Generated by StarUML(tm) C++ Add-In
//
//  @ Project : Untitled
//  @ File Name : rectangle.cpp
//  @ Date : 04.10.2019
//  @ Author : 
//
//
 
 
#include "rectangle.h"
#include <iostream>
#include <fstream>
#include <string>
#include <locale.h>
using namespace std;
 
float rectangle::area(float a,float b) {
    float result = a * b;
    return result;
}
 
float rectangle::perimeter(float a, float b) {
    float result = (a + b) * 2;
    return  result;
}
int main()
{
    setlocale(LC_ALL, "rus");
    
    cout << "Введите значения для высоты/долготы: ";
    float valueH, valueW;
    cin >> valueH >> valueW;
    rectangle first(valueH, valueW);
    rectangle second(first);
 
    rectangle second2;
    second2=first; // реализация перегрузки оператора "="
 
    rectangle third;
    third = first;
    ++third; // реализация перегрузки оператора инкремента
 
    cout << first;
 
    cout << "Периметер прямоугольника равен: ";
    first.perimeter(first.height, first.weight);
    cout << "Площадь прямоугольника равна: ";
    first.area(first.height, first.weight);
 
    /*string path = "myFile.txt";
    fstream fs;
    fs.open(path, fstream::in | fstream::out | fstream::app);
    if (!fs.is_open)
    {
        cout << "\tОшибка открытия файла!" << endl;
    }
    else
    {
        cout << "\tФайл открыт!" << endl;
    }
    fs.close();*/
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2019, 14:26
Ответы с готовыми решениями:

Перегрузка потокового оператора (<<). Выдает адрес вместо значения
Сабж. Все компелится нормально. Если делать &lt;&lt; void то работает ок см комменты если делать класса...

Перегрузка потокового ввода/вывода
Вот сама перегрузка ostream&amp; operator&lt;&lt; (ostream&amp; out, Poli&amp; outstream) { out&lt;&lt;&quot;Степень...

Перегрузка потокового ввода-вывода
Доброго времени суток!!! Возникла такая проблема: необходимо сделать перегрузку операций &lt;&lt; и &gt;&gt;....

Перегрузка операторов потокового ввода-вывода
Пожалуйста, ответе на такой вопрос: почему при написании класса, при перегрузке операторов...

4
136 / 76 / 60
Регистрация: 14.09.2019
Сообщений: 218
05.10.2019, 14:52 2
Лучший ответ Сообщение было отмечено Right-now как решение

Решение

Right-now, оператор<< сделай как обычную функцию, а не метод класса
0
Мозгоправ
1730 / 1024 / 468
Регистрация: 01.10.2018
Сообщений: 2,137
Записей в блоге: 2
05.10.2019, 15:01 3
Цитата Сообщение от ibse Посмотреть сообщение
Right-now, оператор<< сделай как обычную функцию, а не метод класса
Right-now, не "как обычную функцию", а как дружественную функцию. Т.е. в описании класса эта функция должна быть описана с квалификатором friend. Тогда внутри функции можно будет обращаться к закрытым полям класса. А в остальном, да, как обычная функция не-член класса.
0
136 / 76 / 60
Регистрация: 14.09.2019
Сообщений: 218
05.10.2019, 15:37 4
Цитата Сообщение от L0M Посмотреть сообщение
не "как обычную функцию", а как дружественную функцию
зачем? у ТС же все поля открытые
0
Мозгоправ
1730 / 1024 / 468
Регистрация: 01.10.2018
Сообщений: 2,137
Записей в блоге: 2
05.10.2019, 18:06 5
Цитата Сообщение от ibse Посмотреть сообщение
зачем? у ТС же все поля открытые
Для порядка. К порядку надо привыкать.
Не всегда же ТС будет в классах все поля открытыми делать?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2019, 18:06

Перегрузка операторов потокового ввода вывода
Есть класс &quot;деканат&quot;, полем которого есть список студентов, объектов из класса &quot;Студент&quot;. Как...

Перегрузка потокового ввода/вывода для класса с полем типа string
Возможно ли перегрузить &gt;&gt; и &lt;&lt; или придётся заменить переменную string на массив char? У меня...

Перегрузка оператора вывода в С++ (для вывода данных вектора)
Как правильно перегрузить оператор вывода для вектора чтобы он выводил все данные из вектора ? Для...

Перегрузка оператора вывода
struct SomeStruct { std::ostream&amp; operator&lt;&lt; (std::ostream&amp; s/*, SomeStruct&amp;*/) { return s &lt;&lt;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru