ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Перегрузка оператора присваиванияОн позволяет избежать той же ситуации, которая возникает в предыдущем случае, но уже при выполнении присваивания. Если оператор = не перегружен, то выполняется поэлементное копирование полей объекта. Форма записи стандартная: Имя_класса& Имя_класса::operator=(const Имя_класса&).
Пример String& String:: operator =(const String& st) { if (this ==&st) return * this;//защита от присваивания самому себе delete [] str;//удаление предыдущей строки len = st.len; str = new char [len+1]; strcpy(str,st.str); return * this; }
Нужна и вторая версия оператора присваивания, чтобы можно было присвоить объекту непосредственно строку и не применять конструктор (неявно) для преобразования из строки в String:
String& String:: operator =(const char * s) { delete [] str;//удаление предыдущей строки len = strlen(s); str = new char [len+1]; strcpy(str,s); return * this; }
Теперь можно выполнить: String name,num; char temp[40]; … name = temp;//используется конструктор копирования … num = name;//если его нет, то обычный конструктор
Вопросы для самоконтроля · Какие конструкторы применяются для выполнения неявных преобразований базовых типов данных или данных некоторого класса в тип, соответствующий классу? · Перечислите ситуации, когда применяются неявные преобразования базовых типов данных и типов, соответствующих классам? · Каким образом декларируются функции приведения типов объектов классов к базовым (встроенным в язык) типам данных? · Каким образом выполняется декларация дружественного, по отношению к некоторому классу, оператора? – за счет чего могут автоматически преобразовываться его аргументы? · Как выглядят декларации конструкторов копирования? · Как выполняется копирование в случае отсутствия конструктора копирования? · В каких ситуациях могут возникать висячие ссылки? · Как выглядит аргумент метода, реализующего перегрузку оператора присваивания? Вопросы для самостоятельного изучения · Выполните перегрузку для оператора «-» для представленного выше класса Time! · Выполните перегрузку оператора присваивания для представленного выше класса Time! · Разработайте конструктор копирования для представленного выше класса Time!
Лекция 22. С++: Размещение объектов в heap-памяти и наследование по иерархии классов Не нашли, что искали? Воспользуйтесь поиском:
|