Yello
Зарегистрирован: 09.03.2006 Сообщения: 107
|
Добавлено: Пн Янв 22 2007 15:36 Заголовок сообщения: Два вопроса по синтаксису С++ (забыл...) ПЛЗ, СРОЧНО! |
|
|
Вопрос первый:
есть, например,
monom operator/(const monom& a, const monom& b)
{
monom mm;
чё-то делается;
return mm;
}
А как надо написать, чтобы в конце не вызывался деструктор (а перед ним - конструктогр копий), т.е. чтобы не делалась двойная работа?
Насколько помню, это как раз
monom& operator/(const monom& a, const monom& b){
}
А что надо изменить в ТЕЛЕ?
Вопрос второй:
Если есть функция-член класса (например G::power(), а вызывается g.power()), а я хочу указать, что аргумент класса G - всегда const, то КАК ЭТО НАПИСАТЬ?
(аргумент-то не в скобочках, наверно надо использовать слово this, но как именно - не помню, хоть убей).
Плз... |
|
критикан
Зарегистрирован: 18.02.2005 Сообщения: 247
|
Добавлено: Вт Янв 23 2007 11:41 Заголовок сообщения: Re: Два вопроса по синтаксису С++ (забыл...) ПЛЗ, СРОЧНО! |
|
|
Yello писал(а): | Вопрос первый:
есть, например,
monom operator/(const monom& a, const monom& b)
{
monom mm;
чё-то делается;
return mm;
}
А как надо написать, чтобы в конце не вызывался деструктор (а перед ним - конструктогр копий), т.е. чтобы не делалась двойная работа?
Насколько помню, это как раз
monom& operator/(const monom& a, const monom& b){
}
А что надо изменить в ТЕЛЕ? |
Видимо, Жёлты, желает вот что:
Код: | monom& monom::operator/(const monom& a)
{
чё-то делается;
return *this;
}
|
но это обычно применяется для операторов с одновременным присваиванием (+=, -=, *=, /=, ++, --), а для операторов без присваивания обычно пишутся обычные, то есть некомпонентные, операторные функции, такие, какую привёл Жёлты. Но использование некомпонентных операторных функций, не содержащих копирования объектов, с точки зрения удобства не оправдано, потому что при использовании их в инфиксной нотации, накладывается столько ограничений, что проще использовать традиционные неоператорные функции.
Yello писал(а): | Вопрос второй:
Если есть функция-член класса (например G::power(), а вызывается g.power()), а я хочу указать, что аргумент класса G - всегда const, то КАК ЭТО НАПИСАТЬ?
(аргумент-то не в скобочках, наверно надо использовать слово this, но как именно - не помню, хоть убей). |
Если я правильно понял, Жёлты желает, чтобы переменная класса G считалась константой. Но, насколько я знаю, компиляторы запрещают вызов компонентной функции, принадлежащей константной переменной, поэтому вызов g.power() является некорректным. Другое толкование второго вопроса такое: Жёлты желает, чтобы переменная класса G, используемая в функции power(), считалась константой. Тогда её описание должно быть таким:
Код: | тип power(const G&); |
можно и так:
но нужно иметь ввиду, что могут быть побочные эффекты при копировании.
-------------------------
Насколько велики плюсы в названии C++? |
|
Yello
Зарегистрирован: 09.03.2006 Сообщения: 107
|
Добавлено: Ср Янв 24 2007 20:54 Заголовок сообщения: |
|
|
Всё, вопросы сняты оба.
На первый вопрос был ответ такой - написать слово const после закрывающей круглой скобки.
А на второй, как я понял из публикаций, в С++ нет ответа - локальный нестатический объект при выходе из блока {...} будет разрушен, и это никак не запретишь... |
|