K
Karas
Доброго времени суток! Меня интересует следующий вопрос.
В одной книжке написано примерно так:
Если в классе есть конструктор и функция оператора:
то становится возможной следующая запись:
и написано, что компилятор сначала преобразует число 1 в класс CNumber, а затем вызовет функцию operator+.
В С++ Builder 6 создаю такой класс:
Затем пишу:
и получаю [C++ Error] Unit1.cpp(29): E2096 Illegal structure operation
Если компилятор принудительно заставить преобразовать 3 в CNumber:
то все работает. Также помогает создание дружка:
Но мне все таки хочется узнать насчет первого варианта:
1. Я что-то непонимаю или где-то ошибаюсь
2. Автор книги допустил ошибку
3. Или в разных версиях компилятора данная ситуация обрабатывается по разному.
PS
Автор книги использует RHIDE и Visual Studio.
В моей Visual Studio 2005 похожая ситуация тоже не компиляется.
Я дико извиняюсь за то что написал тему дважды, у мя оборвалось интернет-соединение во время публикации темы, и я по глупости подумал что тема не появилась на форуме и попытался снова.
В одной книжке написано примерно так:
Если в классе есть конструктор и функция оператора:
Код:
CNumber(int n);
CNumber operator+(const CNumber &other);
Код:
CNumber n1 = 1 + n2;
В С++ Builder 6 создаю такой класс:
Код:
class CNumber
{
int Number;
public:
int get_n() const {return Number;}
CNumber(int n) {Number = n;}
CNumber operator+(const CNumber &other)
{CNumber New(Number+other.get_n()); return New;}
};
Код:
CNumber n1(1), n2(2);
n1 = 3+n2;
Если компилятор принудительно заставить преобразовать 3 в CNumber:
Код:
CNumber n1(1), n2(2);
n1 = (CNumber)3+n2;
Код:
friend CNumber operator+(int n, CNumber &other);
1. Я что-то непонимаю или где-то ошибаюсь
2. Автор книги допустил ошибку
3. Или в разных версиях компилятора данная ситуация обрабатывается по разному.
PS
Автор книги использует RHIDE и Visual Studio.
В моей Visual Studio 2005 похожая ситуация тоже не компиляется.
Я дико извиняюсь за то что написал тему дважды, у мя оборвалось интернет-соединение во время публикации темы, и я по глупости подумал что тема не появилась на форуме и попытался снова.