Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объясните пару строк, &operator= 
V
    Опции темы
6axyc
Дата 29.12.2011, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



Код

class Number
{
public:
    string name;
    string number;
    Number(const Number &v):
    name(v.name),
        number(v.number){}
    Number(){}
    const Number &operator=(const Number &v)
    {
        name=v.name;
        number=v.number;
        return v;
    }
};


вобщем я только начал познавать азы в с++.
ну и скачал пару роликов.
дык вот не могу понять что именно делают эти 2 поля
Код

Number(const Number &v):
    name(v.name),
        number(v.number){}


и

Код

    const Number &operator=(const Number &v)
    {
        name=v.name;
        number=v.number;
        return v;
    }

если кто сможет помочь парой слов, или дать ссылку, буду рад.

просто убирая эти поля, программа все еще функционирует.
к стате это простая прога которая считывает с файла имя и телефон, и делает поиск имени в уже загруженном массиве.

Это сообщение отредактировал(а) 6axyc - 29.12.2011, 16:58
PM MAIL   Вверх
bsa
Дата 29.12.2011, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(6axyc @  29.12.2011,  17:53 Найти цитируемый пост)
вобщем я только начал познавать азы в с++.
ну и скачал пару роликов.
сотри их немедленно!!! Они вредны.
Затем читаешь статью С чего начать изучение С/С++ и делаешь соответствующие выводы.

Цитата(6axyc @  29.12.2011,  17:53 Найти цитируемый пост)
дык вот не могу понять что именно делают эти 2 поля
понятия "поле" нет в С++.

Код
Number(const Number &v) : name(v.name), number(v.number){}
Это код копирующего конструктора класса Number, который инициализирует свойства name и number в зависимости от соответствующих значений копируемого объекта.

Код
    const Number &operator=(const Number &v)
    {
        name=v.name;
        number=v.number;
        return v;
    }
Это код оператора присваивания. Кстати, он сделан неверно. Должен быть так:
Код
    Number &operator=(const Number &v)
    {
        name = v.name;
        number = v.number;
        return *this;
    }
Это к тому, почему надо срочно удалить эти ролики.

Цитата(6axyc @  29.12.2011,  17:53 Найти цитируемый пост)
просто убирая эти поля, программа все еще функционирует.
Данному классу не нужны особые методы копирования/присваивания, так как компилятор делает их сам точно такими же, как у тебя в коде. Но когда используется ручное выделение памяти или получение других ресурсов, то тогда нужно делать собственные операторы.


Это сообщение отредактировал(а) bsa - 29.12.2011, 17:19
PM   Вверх
volatile
Дата 30.12.2011, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(bsa @  29.12.2011,  17:18 Найти цитируемый пост)
    const Number &operator=(const Number &v)
    {
        name=v.name;
        number=v.number;
        return v;
    }
Это код оператора присваивания. Кстати, он сделан неверно. Должен быть так:

bsa, объясните почему не верно?
Видимо я чего-то в корне не понимаю... Имхо, в данном случае оператор присваивания сделан очень даже по джедайски (или как там это называется?), в общем нормально сделан  smile, мне понравилось.



PM MAIL   Вверх
bsa
Дата 30.12.2011, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



оператор присваивания должен вернуть неконстантную ссылку на свой объект. Иначе не будут работать конструкции вида: (x += 10)++; допустимость и/или наглядность подобных конструкций не обсуждаем
Для учебного материала, имхо, подобная реализация конструктора действительно выглядит неверно. В практике понимающего программиста теоретически может использоваться (но зачем?).
PM   Вверх
6axyc
Дата 30.12.2011, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 29.4.2008

Репутация: нет
Всего: нет



bsa спасибо, первую книгу я уже скачал smile
начал читать.
PM MAIL   Вверх
volatile
Дата 4.1.2012, 01:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(bsa @  30.12.2011,  12:09 Найти цитируемый пост)
Иначе не будут работать конструкции вида: (x += 10)++; 

Ну вообще-то такая конструкция работать будет. (верней неизвестно, это другой оператор, с другим аргуметном)
Не будет работать, что-то типа : (x = y) ++;
и жалко что 
Цитата(bsa @  30.12.2011,  12:09 Найти цитируемый пост)
допустимость и/или наглядность подобных конструкций не обсуждаем


Хотя, если подходить строго, вы абсолютно правы.
Раз стандартные типы с++ не запрещают выполнять такие кренделя, то и пользовательские типы по-возможности, должны  вести себя так-же, согласен.


Это сообщение отредактировал(а) volatile - 4.1.2012, 01:45
PM MAIL   Вверх
bsa
Дата 4.1.2012, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(volatile @  4.1.2012,  02:34 Найти цитируемый пост)
Раз стандартные типы с++ не запрещают выполнять такие кренделя, то и пользовательские типы по-возможности, должны  вести себя так-же, согласен.

вот именно. Исключения есть (boost::spirit), но они единичны и, как водится, подтверждают правило.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.