Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегрузка операторов / 14 сообщений из 14, страница 1 из 1
24.06.2010, 11:18
    #36705244
alexey_sz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
Такой вопрос из области теории
В c++ можно перегружать операторы 2 способами :
в виде функций членов или в виде дружественных глобальных функций . Некоторые из
операторов можно перегружать лишь в виде функций членов - например оператор =.
Кто-нибудь знает , чем вызвано это требование.
...
Рейтинг: 0 / 0
24.06.2010, 13:16
    #36705711
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
alexey_sz, потому что если ты не создаешь оператор =, то за тебя его делает компилятор, именно как член класса
...
Рейтинг: 0 / 0
24.06.2010, 15:16
    #36706135
alexey_sz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
blinded,

Насчет оператора = согласен - но в стандарте вроде есть еще операторы , которые
нельзя перегружать как глобальные дружественные функции - которые не создаются компилятором по умолчанию
...
Рейтинг: 0 / 0
24.06.2010, 15:27
    #36706173
egorych
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
alexey_szно в стандарте вроде есть еще операторы , которые
нельзя перегружать как глобальные дружественные функцииnew и delete во всех своих ипостасях
...
Рейтинг: 0 / 0
24.06.2010, 17:54
    #36706648
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
alexey_szНекоторые из
операторов можно перегружать лишь в виде функций членов - например оператор =.
Кто-нибудь знает , чем вызвано это требование.

Это требование вызвано стандартом языка С++.
...
Рейтинг: 0 / 0
24.06.2010, 17:57
    #36706656
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
new и delete тоже есть стандартные и переопределённые. Поэтому компилятор должен при компиляции
каждого модуля знать, определены ли new и delete для данного класса, чтобы его вызывать. Это никак не может быть достигнуто без определения new и delete в классе, поскольку модель сборки -- раздельная компиляция модулей и последующая линковка.

Собственно, в этом причина и всех остальных требований.
...
Рейтинг: 0 / 0
03.09.2010, 18:08
    #36828976
mriadus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
MasterZivnew и delete тоже есть стандартные и переопределённые. Поэтому компилятор должен при компиляции
каждого модуля знать, определены ли new и delete для данного класса, чтобы его вызывать. Это никак не может быть достигнуто без определения new и delete в классе, поскольку модель сборки -- раздельная компиляция модулей и последующая линковка.

Собственно, в этом причина и всех остальных требований.
Единица компиляции - это больше, чем класс.
...
Рейтинг: 0 / 0
03.09.2010, 18:08
    #36828978
mriadus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
MasterZivalexey_szНекоторые из
операторов можно перегружать лишь в виде функций членов - например оператор =.
Кто-нибудь знает , чем вызвано это требование.

Это требование вызвано стандартом языка С++.
Вопрос-то в том, чем вызвано такое требование в стандарте.
...
Рейтинг: 0 / 0
11.09.2010, 11:50
    #36841611
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
mriadus wrote:

> Вопрос-то в том, чем вызвано такое требование в стандарте.

Можно было бы почитать в "Дизайн и эволюция С++" почему именно
так было сделано.

Но я думаю, что так более логично, потому как по семантике
операций
=
==
<
>
и т.д.

один аргумент (this) обязателен, поэтому и сделали в С++
это функциями-членами.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.10.2012, 15:07
    #38014655
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
Код: plaintext
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.
#include <iostream>
#include <stdlib.h>

using namespace std;
typedef unsigned int uint;

struct WN {
  char * w;
  uint   n;
};
ostream& operator<< (ostream& os, const WN * s );
ostream& operator<< (ostream& os, const WN& s );


int main (){
	WN a = {"word", 12};

	cerr << &a<< endl <<a;
	//cout << &a<< endl <<a<< endl;
	int i = 123;
    operator<<(cout, a);

	 operator<<(cout, i);

	//int i=operator+(1,2);


}
ostream& operator<< (ostream& os, const WN * s ){
  os << s->w <<" "<< s->n; 
  return os;
}
ostream& operator<< (ostream& os, const WN& s ){
  os <<'-'<< s.w <<" "<< s.n; 
  return os;
}



а почему свой перегруженный оператор ostream& operator<< (ostream& os, const WN& s );
я могу вызывать в такой форме
Код: plaintext
1.
  operator<<(cout, a);



а какой нибудь ostream& operator<< (ostream& os, int i );

нет?
...
Рейтинг: 0 / 0
26.10.2012, 15:17
    #38014693
Abstraction
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
tchingizа почему свой перегруженный оператор ostream& operator<< (ostream& os, const WN& s );
я могу вызывать в такой форме
Код: plaintext
1.
  operator<<(cout, a);



а какой нибудь ostream& operator<< (ostream& os, int i );

нет?А если так?
Код: plaintext
1.
os.operator<<(i);
...
Рейтинг: 0 / 0
26.10.2012, 15:20
    #38014703
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
аааааа
ихнее живет в классе, а мое в классе ессно не живет
...
Рейтинг: 0 / 0
26.10.2012, 15:21
    #38014706
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
*в классе ostream
...
Рейтинг: 0 / 0
26.10.2012, 15:21
    #38014707
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка операторов
был нетрезв, приношу свои извинения
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегрузка операторов / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]