Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > О синтаксисе перегрузки операторов


Автор: EnergoHokum 21.4.2008, 12:43
Подскажите (заранее извиняюсь, если боян), отчего
Код

int& operator = (const int& i)
{
    ...
}

но
Код

operator int ()
{
    ...
}

Почему такое различие синтаксиса? Вроде и там, и там -- перегрузка оператора...

Автор: Lazin 21.4.2008, 12:58
по тому что это разные операторы
1-й - оператор присваивания, 2-й - приведения типа

Автор: EnergoHokum 21.4.2008, 13:05
Ну так в арифметических операторах тоже используется синтаксис нумба 1, оператор -> тоже с синтаксисом нумба 1, чем таким особенным приведение типов отличается-то? (Или я вообще туплю? Неясно...)
А вот оператор "отдать указатель" (как он по научному называется?) -- синтаксис нумба 2:
Код

operator NewClass* ()
{
    ...
}

Нич-чего не понимаю... Пока не понимаю.

Автор: vinter 21.4.2008, 13:37
Цитата(EnergoHokum @  21.4.2008,  14:05 Найти цитируемый пост)
А вот оператор "отдать указатель" (как он по научному называется?) -- синтаксис нумба 2:

это приведение типа, к типу NewClass*. а не 
Цитата(EnergoHokum @  21.4.2008,  14:05 Найти цитируемый пост)
"отдать указатель"


Автор: Fazil6 21.4.2008, 13:39
Цитата(EnergoHokum @  21.4.2008,  13:05 Найти цитируемый пост)
Ну так в арифметических операторах тоже используется синтаксис нумба 1,

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

Автор: EnergoHokum 21.4.2008, 14:05
Ну, там специально так сделано, чтобы их различить вообще можно было (как я помню).

Автор: Alek86 21.4.2008, 14:16
тебе не нравится, что
Код
operator int ()

не возвращает значения?

тогда представь, что приходилось бы писать
Код
int operator int ()

или еще хуже
Код
const std::string& operator const std::string& ()

зачем 2 раза одно и то же повторять?

Автор: EnergoHokum 21.4.2008, 15:18
Не, меня смущает smile расположение этого int относительно operator. В одном случае -- до него, в другом -- после.

Автор: Earnest 21.4.2008, 15:42
А отсутствие возвращаемого типа у конструктора - не смущает?
Приведение - это весьма специфичный оператор, поэтому и синтаксис у него специфичный. Как определения, так и вызова.

Автор: Alek86 21.4.2008, 15:43
ну, к этому привыкнуть нужно
ибо int тут значит не совсем возвращаемое значение, а именно вид оператора
возвращаемое значение отсутствует, чтобы не было лишнего копипаста

Автор: EnergoHokum 23.4.2008, 11:25
Спасибо, ситуация (вроде) проясняется. Буду дальше копаться.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)