MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Информатика, программирование -> Присваивание и Инициализация

Название:Присваивание и Инициализация
Просмотров:79
Раздел:Информатика, программирование
Ссылка:Скачать(4 KB)
Описание:Строка - это структура данных, состоящая из вектора символов и длины этого вектора. Вектор создается конструктором и уничтожается деструктором. Однако это может привести к неприятностям.

Университетская электронная библиотека.
www.infoliolib.info

Часть полного текста документа:

Присваивание и Инициализация
    Рассмотрим очень простой класс строк string:
    struct string {
    char* p;
    int size; // размер вектора, на который указывает p
    string(int sz) { p = new char[size=sz]; }
    ~string() { delete p; }
    };
    Строка - это структура данных, состоящая из вектора символов и длины этого вектора. Вектор создается конструктором и уничтожается деструктором. Однако это может привести к неприятностям.
    Например:
    void f()
    {
    string s1(10);
    string s2(20);
    s1 = s2;
    }
    будет размещать два вектора символов, а присваивание s1=s2 будет портить указатель на один из них и дублировать другой. На выходе из f() для s1 и s2 будет вызываться деструктор и уничтожать один и тот же вектор с непредсказуемо разрушительными последствиями. Решение этой проблемы состоит в том, чтобы соответствующим образом определить присваивание объектов типа string:
    struct string {
    char* p;
    int size; // размер вектора, на который указывает p
    string(int sz) { p = new char[size=sz]; }
    ~string() { delete p; }
    void operator=(string&)
    };
    void string::operator=(string& a)
    {
    if (this == &a) return; // остерегаться s=s;
    delete p;
    p=new char[size=a.size];
    strcpy(p,a.p);
    }
    Это определение string гарантирует, и что предыдущий пример будет работать как предполагалось. Однако небольшое изменение f() приведет к появлению той же проблемы в новом облике:
    void f()
    {
    string s1(10);
    s2 = s1;
    }
    Теперь создается только одна строка, а уничтожается две. К неинициализированному объекту определенная пользователем операция присваивания не применяется. Беглый взгляд на string::operator=() объясняет, почему было неразумно так делать: указатель p будет содержать неопределенное и совершенно случайное значение. Часто операция присваивания полагается на то, что ее аргументы инициализированы. Для такой инициализации, как здесь, это не так по определению. Следовательно, нужно определить похожую, но другую, функцию, чтобы обрабатывать инициализацию:
    struct string {
    char* p;
    int size; // размер вектора, на который указывает p
    string(int sz) { p = new char[size=sz]; }
    ~string() { delete p; }
    void operator=(string&)
    string(string&);
    };
    void string::string(string& a)
    {
    p=new char[size=a.size];
    strcpy(p,a.p);
    }
    Для типа X инициализацию тем же типом X обрабатывает конструктор X(X&). Нельзя не подчеркнуть еще раз, что присваивание и инициализация - разные действия. Это особенно существенно при описании деструктора. Если класс X имеет конструктор, выполняющий нетривиальную работу вроде освобождения памяти, то скорее всего потребуется полный комплект функций, чтобы полностью избежать побитового копирования объектов:
    class X {
    // ...
    X(something); // конструктор: создает объект
    X(&X); // конструктор: копирует в инициализации
    operator=(X&); // присваивание: чистит и копирует
    ~X(); // деструктор: чистит
    };
    Есть еще два случая, когда объект копируется: как параметр функции и как возвращаемое значение. ............




Нет комментариев.



Оставить комментарий:

Ваше Имя:
Email:
Антибот:  
Ваш комментарий:  



Похожие работы:

Название:Определение диаметра молекул
Просмотров:394
Описание: Муниципальное общеобразовательное учреждение «Основная общеобразовательная школа №10» Определение диаметра молекул Лабораторная работа Исполнитель: Масаев Евгений 7 класс «А» Р

Название:Нация: проблема определения и методология исследования
Просмотров:206
Описание: ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ им. А.М. Горького ФИЛОСОФСКИЙ ФАКУЛЬТЕТ

Название:Сущность основания и порядок определения заключения под стражу
Просмотров:94
Описание: Самарский Филиал Московского Городского Педагогического Университета     КУРСОВАЯ РАБОТА по дисциплине: «Уголовный процесс» Тема: «Сущность основания и порядок определения заключени

Название:Определения места и роли института участковых уполномоченных милиции в профилактике правонарушений среди несовершеннолетних
Просмотров:85
Описание: Введение   Актуальность темы исследования. Исследования проблем предупреждения и пресечения участковым уполномоченным милиции административных правонарушений, совершаемых несовершеннолетними, обладают

Название:Определение технической возможности предотвращения ДТП водителем
Просмотров:99
Описание: Министерство образования и науки Российской Федерации Федеральное агентство по образованию ИРКУТСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ Менеджмент на автомобильном транспорте наименование ка

 
     

Вечно с вами © MaterStudiorum.ru