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


Автор: Dims 7.12.2007, 09:23
Нужно ли определять operator= и конструктор по ссылке для класса или структуры, у которого все поля являются либо встроенными типами, либо классами, у которых определён operator= и конструктор по ссылке?

Нужно ли переопределять операторы, если члены имеют типа map, set и т.д. из STL? То есть, правильно ли в таком случае будет работать операторы по умолчанию?

Автор: Daevaorn 7.12.2007, 09:28
Цитата(Dims @  7.12.2007,  10:23 Найти цитируемый пост)
конструктор по ссылке

это что за зверь такой?

Автор: Dims 7.12.2007, 10:26
Цитата(Daevaorn @  7.12.2007,  09:28 Найти цитируемый пост)
это что за зверь такой? 

Что, уже отменили?

Это такой вот конструктор

Код

class MyClass {
   MyClass(const MyClass& proto);
};


который создаёт объект типа MyClass на основании другого имеющегося объекта этого типа. Как правило, этот конструктор корректно копирует содержимое старого экземпляра в новый.

Он вызывается в некоторых специальных случаях. Точно не помню, каких, типа при передаче параметра в функцию. 

Как я понимаю, этот конструктор, а также оператор присваивания, надо переопределять, если твой объект должен быть "полноценным", то есть, чтобы его можно было не задумываясь использовать наравне с другими объектами во всех возможных ситуациях.

Автор: Daevaorn 7.12.2007, 10:35
Цитата(Dims @  7.12.2007,  11:26 Найти цитируемый пост)
Что, уже отменили?

Может в ваших степях такой есть, но "конструктора по ссылке"" в С++ никогда не было. То что ты описал - это конструктор копирования. Выражайся точнее.
Цитата(Dims @  7.12.2007,  10:23 Найти цитируемый пост)
Нужно ли

Нет
Цитата(Dims @  7.12.2007,  10:23 Найти цитируемый пост)
Нужно ли переопределять операторы, если члены имеют типа map, set и т.д. из STL?

Нет, если они в свою очередь хранят "правильные" объекты.
Цитата(Dims @  7.12.2007,  10:23 Найти цитируемый пост)
То есть, правильно ли в таком случае будет работать операторы по умолчанию? 

да

Автор: Dims 7.12.2007, 11:24
То есть, по умолчанию, для структуры, копирующий конструктор выполняет не bitwise copy, а вызывает для членов, если есть, тоже копирующий конструктор?

Автор: Lazin 7.12.2007, 11:37
да

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