С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 24
1

Переопределение операторов

10.01.2023, 15:57. Показов 384. Ответов 5
Метки с++ (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется класс. Нужно переопределить операторы сдвига для его ввода/вывода через потоки ввода/вывода cin и cout. Также для своего класса переопределить ещё один произвольный оператор (на свой выбор). В функции main() продемонстрировать работу перегруженных операторов (ввода, вывода и своего).
#include <iostream>
#include <string>
#include <cstring>
using namespace std;

class Avtomobil
{
private:
char marka[100];
int mosnosch;
double razgon;

public:
Avtomobil()
{
::strcpy(marka,"No !");
mosnosch = 3;
razgon = 50.0;
}
void setFields(string _marka, int _mosnosch, double _razgon)
{
::strcpy(marka,_marka.c_str());
mosnosch = _mosnosch;
razgon = _razgon;
}
void getFields()
{
cout << "Марка: " << marka << endl;
cout << "Мощность: " << mosnosch << endl;
cout << "Разгон до 100 км/ч: " << razgon << endl;
}
};

int main()
{
setlocale(0, "rus");

Avtomobil obj;
obj.getFields();
obj.setFields("Iva", 25, 100.0);
obj.getFields();

system("pause");
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2023, 15:57
Ответы с готовыми решениями:

Переопределение операторов
Плиз помогите сделать задачку.. Написать класс StrangeInt для которого нижеследующий код ...

Переопределение операторов
Еще раз об этом интересном вопросе. У меня есть матрицы , условно назовём их тип matrix, есть...

переопределение операторов
Стоит следующая задача. Надо сделать массив чар, которые представляют собой строку (специально...

Переопределение операторов
Доброго времени суток.. В древние времена, когда ещё жили мамонты, ковырял я потихоньку плюсы.....

Переопределение операторов С++
Помогите разобраться с переопределением операторов, как что и куда записывается, какие параметры....

5
680 / 290 / 74
Регистрация: 07.01.2023
Сообщений: 1,201
10.01.2023, 17:00 2
Ну так напишите, а мы вам поможем если что-то пойдет "не так"
0
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 24
11.01.2023, 01:01  [ТС] 3
Да всё не так)
0
4865 / 2664 / 913
Регистрация: 29.11.2010
Сообщений: 5,745
11.01.2023, 01:02 4
Мне кажется, надо еще чутка переделать сам класс.
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <cstring>
 
class Automobile {
public:
    Automobile() : brand(), power(), acceleration() {}
 
    Automobile(const char *brand, int power, double acceleration)
            : brand(std::strcpy(new char[std::strlen(brand) + 1], brand)),
              power(power), acceleration(acceleration) {}
 
    Automobile(const Automobile &other)
            : brand(std::strcpy(new char[std::strlen(other.brand) + 1], other.brand)),
              power(other.power), acceleration(other.acceleration) {}
 
    Automobile(Automobile &&other) noexcept {
        swap(*this, other);
    }
 
    Automobile &operator=(Automobile other) {
        swap(*this, other);
        return *this;
    }
 
    ~Automobile() {
        delete[] brand;
    }
 
    friend void swap(Automobile &a, Automobile &b) noexcept {
        std::swap(a.brand, b.brand);
        std::swap(a.power, b.power);
        std::swap(a.acceleration, b.acceleration);
    }
 
    const char *getBrand() const {
        return brand;
    }
 
    int getPower() const {
        return power;
    }
 
    double getAcceleration() const {
        return acceleration;
    }
 
    void setBrand(char *brand) {
        char *newBrand = std::strcpy(new char[std::strlen(brand) + 1], brand);
        delete Automobile::brand;
        Automobile::brand = newBrand;
    }
 
    void setPower(int power) {
        Automobile::power = power;
    }
 
    void setAcceleration(double acceleration) {
        Automobile::acceleration = acceleration;
    }
 
private:
    char *brand;
    int power;
    double acceleration;
};
 
std::ostream &operator<<(std::ostream &out, const Automobile &automobile) {
    return out << "Automobile{"
               << "brand='" << automobile.getBrand() << "', "
               << "power=" << automobile.getPower() << ", "
               << "acceleration='" << automobile.getAcceleration() << "}";
}
 
std::istream &operator>>(std::istream &in, Automobile &automobile) {
    char *brand = new char[4096];
    int power;
    double acceleration;
    in >> brand >> power >> acceleration;
    automobile.setBrand(brand);
    automobile.setPower(power);
    automobile.setAcceleration(acceleration);
    delete[] brand;
    return in;
}
 
std::pair<Automobile, Automobile> operator,(const Automobile &a, const Automobile &b) {
    return {a, b};
}
 
int main() {
 
    Automobile a, b;
    std::cin >> a >> b;
 
    auto pair = (a, b);
 
    std::cout << pair.first << ", " << pair.second;
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 09.05.2022
Сообщений: 24
11.01.2023, 01:03  [ТС] 5
А что с ним не так?
0
4264 / 3323 / 925
Регистрация: 25.03.2012
Сообщений: 12,520
Записей в блоге: 1
11.01.2023, 01:48 6
lemegeton, зачем переусложнять изначально простой класс?
в нём не нужны были никакие brand(std::strcpy(new char[std::strlen(brand) + 1], brand)),
и поля назывались по-другому, зачем ты путаешь новичка переименованием marka в какой-то ещё четвёртый brand???
40 строк превратились в 100

Добавлено через 15 минут
Цитата Сообщение от Pofigist33 Посмотреть сообщение
Нужно переопределить операторы сдвига для его ввода/вывода через потоки ввода/вывода cin и cout.
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
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
 
class Avtomobil
{
private:
    char marka[100];
    int mosnosch;
    double razgon;
 
public:
    Avtomobil()
    {
        ::strcpy(marka, "No !");
        mosnosch = 3;
        razgon = 50.0;
    }
    void setFields(string _marka, int _mosnosch, double _razgon)
    {
        ::strcpy(marka, _marka.c_str());
        mosnosch = _mosnosch;
        razgon = _razgon;
    }
    void getFields(string& _marka, int& _mosnosch, double& _razgon) const
    {
        _marka.assign(marka);
        _mosnosch = mosnosch;
        _razgon = razgon;
    }
};
istream& operator>> (istream& in, Avtomobil& right) {
    string marka;//почему в setFields string если и так работает char? но пусть будет...
    int mosnosch;
    double razgon;
    in >> marka >> mosnosch >> razgon;
    right.setFields(marka, mosnosch, razgon);
    return in;
}
ostream& operator<< (ostream& in, const Avtomobil& right) {
    string marka;
    int mosnosch;
    double razgon;
    right.getFields(marka, mosnosch, razgon);
    cout << "Марка: " << marka << endl;
    cout << "Мощность: " << mosnosch << endl;
    cout << "Разгон до 100 км/ч: " << razgon << endl;
    return in;
}
int main()
{
    setlocale(0, "rus");
    Avtomobil obj;
    cout<<obj;
    cout << "( marka >> mosnosch >> razgon):";
    cin >> obj;
    cout << obj;
 
    system("pause");
    return 0;
}
0
11.01.2023, 01:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2023, 01:48
Помогаю со студенческими работами здесь

переопределение операторов
Писал прогу с переопределнием операторов, всё работало, теперь когда мне понадобилась та либа, в...

Переопределение операторов и массивы
Task* operator+=(Task *newTasks) { Task *finalTask = tasks + newTasks; } Error:...

Создать класс строку в С++. Переопределение операторов
Доброго времени суток. Подскажите пожалуйста в чём ошибка в операторе &gt;&gt;. Когда его вызываю в...

Возможно ли переопределение операторов для пользовательских типов?
Собственно преследуемая цель: Определить свой тип int - myint. Переопределить для него операторы...

Переопределение операторов как член-класса и как дружественная функция
Привет. Задача создать класс целых чисел, для него нужно переопределить операторы ++ и + как...

Переопределение операторов, создание класса "Матрица"
Здравствуйте, нужна помощь, уже очень долго не могу понять в чём проблема. Создал класс матрица,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru