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

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

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

Перегрузка операторов - C++

05.06.2012, 13:46. Просмотров 678. Ответов 8
Метки нет (Все метки)

Приветствую! Необходима помощь.
Разработать класс Vec4 как вектор из 4-х float. Определить оператор ~ для перестановки элементов вектора в обратном порядке и операторы ввода >> и вывода <<. Напишите тестирующую программу.

Программу написал, но она не работает, равно как и пара найденных в интернете примеров. Что я не подключил/в чем ошибка?

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
#include <iostream>
using namespace std;
 
class Vec4{
public:
    float vector[4]; 
    float vectemp;
    void operator ~(float *vector){
        vectemp=vector[0];
        vector[0]=vector[3];
        vector[3]=vectemp;
        vectemp=vector[1];
        vector[1]=vector[2];
        vector[2]=vectemp;
    };
    friend istream operator >>(istream& cin_, float *vector){
        for (int i=0; i<4; i++){
            cin_>>vector[i];}
    return cin_;
    };
    friend ostream operator <<(ostream& cout_, float *vector){
    cout_<<vector[0]<<", "<<vector[1]<<", "<<vector[2]<<", "<<vector[3];
    return cout_;
    };
};
Vec4 vector1;
void main(){
    int n;
    cin >> vector1;
    cout << vector1; 
    ~vector1;
}
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2012, 13:46     Перегрузка операторов
Посмотрите здесь:

Перегрузка операторов! - C++
Создать несколько объектов (например, a и b) разработанного класса. Класс – символьная строка. Реализовать для объектов данного класса...

Перегрузка операторов - C++
Никак не возьму в толк, почему оно не работает! // CG5.cpp : Defines the entry point for the console application. // #include...

Перегрузка операторов - C++
Хочу написать функцию вывода стека на экран. Стек построен на основе динамического массива который написал я. И вот интересно, при написаны...

Перегрузка операторов >>, <<, [] - C++
задача: написать перегруженные операторы &lt;&lt;, &gt;&gt; и для объекта массив деков символов. Объект дек реализован. проблема с квадратными...

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

Перегрузка операторов - C++
Помогите пожалуйста, нужно описать класс, реализующий тип данных «целая матрица» и работу с ними. Класс должен реализовывать сложение,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.06.2012, 14:17     Перегрузка операторов #2
Тильда - это деструктор, а не оператор.
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
05.06.2012, 14:20     Перегрузка операторов #3
Почему же, есть такой оператор, только он унарный.

Добавлено через 36 секунд
Если не ошибаюсь, это побитовое НЕ.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
05.06.2012, 14:25     Перегрузка операторов #4
Цитата Сообщение от Jacen Посмотреть сообщение
void operator ~(float *vector){
в скобках пишется только второй операнд, первый - это
C++
1
*this
, он неявный.
Jacen
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 5
07.06.2012, 17:35  [ТС]     Перегрузка операторов #5
Цитата Сообщение от taras atavin Посмотреть сообщение
*this
Понятно, убрал аргумент, ругаться перестало.

Что неправильно в перегрузке ввода-вывода?
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
07.06.2012, 18:09     Перегрузка операторов #6
Цитата Сообщение от Jacen Посмотреть сообщение
Что неправильно в перегрузке ввода-вывода?
ссылку на поток надо возвращать
Jacen
0 / 0 / 0
Регистрация: 28.05.2012
Сообщений: 5
07.06.2012, 18:17  [ТС]     Перегрузка операторов #7
Апдейт(сообщение почему то не редактируется). Разобрался, все работает.
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
#include <iostream>
using namespace std;
class Vec4{
public:
    float vector[4]; 
    float vectemp;
    void operator ~(){
        vectemp=vector[0];
        vector[0]=vector[3];
        vector[3]=vectemp;
        vectemp=vector[1];
        vector[1]=vector[2];
        vector[2]=vectemp;
    };
    friend istream & operator >>(istream & input, Vec4 &vector){
        for (int i=0; i<4; i++){
            input>>vector.vector[i];}
    return input;
    };
    friend ostream & operator <<(ostream & output, Vec4 vector){
        for (int i=0; i<4; i++){
            output<<vector.vector[i];}
    return output;
    };
};
Vec4 vector1;
void main(){
    cin >> vector1;
    cout << vector1; 
    cout <<"\n";
    ~vector1;
    cout << vector1;
}
kent
Нуб со стажем
36 / 34 / 2
Регистрация: 19.02.2012
Сообщений: 118
07.06.2012, 19:20     Перегрузка операторов #8
Цитата Сообщение от Jacen Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Vec4{
public:
    float vector[4]; 
    float vectemp;
    void operator ~(){
        vectemp=vector[0];
        vector[0]=vector[3];
        vector[3]=vectemp;
        vectemp=vector[1];
        vector[1]=vector[2];
        vector[2]=vectemp;
    };
    friend istream & operator >>(istream & input, Vec4 &vector){
        for (int i=0; i<4; i++){
            input>>vector.vector[i];}
    return input;
    };
    friend ostream & operator <<(ostream & output, Vec4 vector){
        for (int i=0; i<4; i++){
            output<<vector.vector[i];}
    return output;
    };
};
лучше переписать вот так:
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
class Vec4{
private:
    float _x,_y,_z,_t;
public:
    Vec4(float x=0,float y=0,float z=0,float t=0){
        _x=x; 
        _y=y;
        _z=z;
        _t=t;
    }
    
    Vec4&operator~(void){
        float buf=_x;
        _x=_t;
        _t=buf;
        buf=_y;
        _y=_z;
        _z=buf;
        return *this;
    }
 
    friend istream & operator >>(istream & input, Vec4 &vector);    
        friend ostream & operator <<(ostream & output, Vec4 vector);
}
 
istream & operator >>(istream & input, Vec4 &vector){
    input>>_x>>_y>>_z>>_t;
    return input;
}
 
ostream & operator <<(ostream & output, Vec4 vector){
    output<<_x<<' '<<_y<<' '<<_z<<' '<<_t;
        return output;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2012, 13:21     Перегрузка операторов
Еще ссылки по теме:

Перегрузка операторов с++ - C++
Доброго времени суток!Вот у меня перегрузка оператора +.Задание сделапть пергрузку так чтобы к строке можно было добавить символ и к...

Перегрузка операторов >> - C++
доброго времени суток. не как не получаеться перегрузить операторы класса. в общем, есть массив типа MString (другой класс) в котором...

Перегрузка операторов - C++
Добрый вечер. Не подскажите, в чём дело? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; struct programTime { programTime() { ...

Перегрузка операторов - C++
Перегрузить оператор ввода, вывода для строки; Перегрузить операторы: +, =, +=, &gt;, &lt;, == .


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

Или воспользуйтесь поиском по форуму:
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
08.06.2012, 13:21     Перегрузка операторов #9
Цитата Сообщение от kent Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
Vec4&operator~(void){
    float buf=_x;
    _x=_t;
    _t=buf;
    buf=_y;
    _y=_z;
    _z=buf;
    return *this;
}
 
friend istream & operator >>(istream & input, Vec4 &vector);    
friend ostream & operator <<(ostream & output, Vec4 vector);
А еще лучше вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Vec4 operator~() const {
    return Vec4(_t, _z, _y, _x);
}
 
template <typename _CharT, class _Traits>
friend std::basic_istream<_CharT, _Traits>& operator>>(std::basic_istream<_CharT, _Traits>&, abc&);
 
template <typename _CharT, class _Traits>
friend std::basic_ostream<_CharT, _Traits>& operator<<(std::basic_ostream<_CharT, _Traits>&, const abc&);
 
/*
    ...
*/
 
template <typename _CharT, class _Traits>
std::basic_istream<_CharT, _Traits>& operator>>(std::basic_istream<_CharT, _Traits>& is, abc& a) {
    return is >> a._x >> a._y >> a._z >> a._t;
}
 
template <typename _CharT, class _Traits>
std::basic_ostream<_CharT, _Traits>& operator<<(std::basic_ostream<_CharT, _Traits>& os, abc& a) {
    return os << a._x << ' ' << a._y << ' ' << a._z << ' ' << a._t;
}
Yandex
Объявления
08.06.2012, 13:21     Перегрузка операторов
Ответ Создать тему
Опции темы

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