powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегрузка операторов
14 сообщений из 14, страница 1 из 1
Перегрузка операторов
    #36705244
alexey_sz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопрос из области теории
В c++ можно перегружать операторы 2 способами :
в виде функций членов или в виде дружественных глобальных функций . Некоторые из
операторов можно перегружать лишь в виде функций членов - например оператор =.
Кто-нибудь знает , чем вызвано это требование.
...
Рейтинг: 0 / 0
Перегрузка операторов
    #36705711
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexey_sz, потому что если ты не создаешь оператор =, то за тебя его делает компилятор, именно как член класса
...
Рейтинг: 0 / 0
Перегрузка операторов
    #36706135
alexey_sz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
blinded,

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

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

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

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

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

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

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

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

один аргумент (this) обязателен, поэтому и сделали в С++
это функциями-членами.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Перегрузка операторов
    #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
Перегрузка операторов
    #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
Перегрузка операторов
    #38014703
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аааааа
ихнее живет в классе, а мое в классе ессно не живет
...
Рейтинг: 0 / 0
Перегрузка операторов
    #38014706
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*в классе ostream
...
Рейтинг: 0 / 0
Перегрузка операторов
    #38014707
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
был нетрезв, приношу свои извинения
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегрузка операторов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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