IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Перегрузка операторов
сообщение
Сообщение #1


Ночной волк
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской

Репутация: -  1  +


#include <iostream.h>

class a {
double x;
public:
void operator++(){
this->x = x+9;
return;
};
friend a operator--(a &b){
b.x = b.x-9;
return b;
};
a operator+(a &c){
(this->x)+=(c.x);
return *this;

};
friend a operator-(a &b, a &c){
a temp;
temp.x=(b.x)-(c.x);
return temp;
};

print(){
cout<<x;
cout<<endl;
};

a(){
x=1;
};
};

int main() {
a kot;
kot.print();
++kot;
cout << endl;
kot.print();
--kot;
kot.print();
a rot, mot;
++rot;
mot = kot+rot;
mot.print();


return 1;
}

Просто перегрузка операторов. При этом минусы - друзья, плюсы - функции члены. Я делаю функции встраиваемыми просто для удобства.

В принципе все работает, но функция Принт вызывает warning. Насколько эффективна программа, нет ли каких других неточностей?

Да, вот еще, как реализуется постфиксная запись? Можно ли делать кардинально разные реализации для разных типов вызова операторов?


--------------------
Не думай о белой обезьяне.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Хорошо... Что говорит MSVC вот на такой код?
#include <iostream.h>
class a {
friend ostream& operator << (ostream& os, const a& obj) { // Заметь, здесь const !!!
os << obj.x;
return os;
}

private:
double x;
public:
a& operator++() {
this->x += 9;
return *this;
}

a operator++(int) {
a copy(*this);
this->x += 9;
return copy;
}

a() {
x = 1;
}
};
int main() {
a kot;
cout << ++kot << endl;
cout << kot << endl;
cout << kot++ << endl;
cout << kot << endl;

return 0;
}
(это каноническая форма перегрузки пре/пост-фиксного инкремента, взято из книги "C++ Coding Standards" Саттера и Александреску)...

Если при перегрузке операции вывода убрать const, программа тут же перестанет компилироваться... Что теперь выводится?

Кстати, цитата оттуда:
Цитата
In calling code, prefer using the prefix form unless you actually need the original value returned by the postfix version. The prefix form is semantically equivalent, just as much typing, and often slightly more efficient by creating one less object. This is not premature optimization; it is avoiding premature pessimization
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 13:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name