crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> преобразование типа и классы
AD
  опции профиля:
сообщение 5.4.2010, 17:11
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Да все очень просто. Лучше не делать таких вот операторов из-за неявного преобразования типов. о вреде неявного преобразования написано очень много. Думаю, сможешь найти! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 5.4.2010, 21:05
Сообщение #12


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


да, я тоже стараюсь избегать неявного преобразования типов.
к тому же, тут компилятор иногда может оказать "медвежью услугу": у мелкософта, к примеру, он сам генерит пустые конструкторы и конструкторы копий по умолчанию. а это, на самом деле, потенциальная дыра. я уже один раз напарывалась на это. уж если нужно преобразование, то его нужно указывать явно. а если оно ещё и сложное - то самому прописывать это преобразование, не надеясь на то, что может придумать компилятор.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 5.4.2010, 21:54
Сообщение #13


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Iron Bug @ 5.4.2010, 22:05) *
у мелкософта, к примеру, он сам генерит пустые конструкторы и конструкторы копий по умолчанию.
Ну вообще-то это кажется по стандарту. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 6.4.2010, 8:55
Сообщение #14


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(ViGOur @ 5.4.2010, 22:54) *
Ну вообще-то это кажется по стандарту. :)

в том то и дело как я понял. если ты не пишешь ничего руками ни конструктор копий ни конструктор по умолчанию, то это за тебя сделает компилятор, однако если ты хотя бы в одном классе родительском переопределишь конструтор копий -- компилятор умывает руки, дальше делай всё сам.
я так понимаю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Влад
  опции профиля:
сообщение 6.4.2010, 10:02
Сообщение #15


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


Не совсем так. Дефолтный конструктор, конструктор копирования, оператор = и деструктор относятся к специальным член-функциям.
Дефолтный конструктор генерируется компилятором автоматически, если не указан явно ни один пользовательский конструктор. Как правило, такой дефолтный конструктор пустой и успешно оптимизируется компилятором. Однако, для всех баз и членов вызываются их дефолтные конструкторы, если таковые существуют, иначе генерируется ошибка компиляции. Для баз - в порядке их объявления в списке наследования, для членов - в порядке их объявления.
Конструктор копирования не наследуется. Если не указан явно пользовательский конструктор копирования, то генерируется дефолтный конструктор копирования, который тупо почленно копирует все базы и члены класса. Порядок копирования тот же.
То же самое верно и для оператора =. Если не указан явно пользовательский оператор назначения (присваивания), то генерируется дефолтный оператор =, который тупо вызывает операторы = для всех баз и членов. Порядок тот же.
Тот же самый принцип действует и для деструкторов, с одним отличием: деструкторы всегда вызываются в порядке, обратном вызовам конструкторов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 19:22