+ Reply to Thread
Results 1 to 9 of 9

Thread: Помогите понять копирующий конструктор .

  1. #1

    Default Помогите понять копирующий конструктор .

    Привет народ . Я тут перевариваю Философию C++ Эккеля . Вроде все было относительно понятно , но вот дошел до копирующих конструкторов и поплыл . Чувствую что не осознаю где-то 70% текста .
    Подскажите хороший подробный материал по ним . И еще интересно , часто ли они используются на практике и в каких задачах ?

  2. #2
    root's Avatar

    Default Re: Помогите понять копирующий конструктор .

    Привет народ . Я тут перевариваю Философию C++ Эккеля . Вроде все было относительно понятно , но вот дошел до копирующих конструкторов и поплыл . Чувствую что не осознаю где-то 70% текста .
    Подскажите хороший подробный материал по ним .
    Для всех начинающих изучать C++, я всегда рекомендую книгу "Джесс Либерти, Освой самостоятельно C++ за 21 день". Вот ссылка на неё, в интернете есть только старый вариант, за 2000 год. Сама книга легко читается, доступно излагается и покрывает все конструкции языка. Мое ИМХО, это одна из лучших книг для старта. После её прочтения уже можно будет читать любые книги на тему C++.

    Книга "Философия C++" предназначена для читателей среднего-высокого уровня. И я бы её крайне не рекомендовал читать новичку.

    Если тебя надоумили читать "Философию С++", то наверняка еще и пытались впарить Страуструпа, как книгу для начального чтения (обычно этой ахинеей страдают преподаватели вузов). Если вздумаешь читать Страуструпа, то берись за него в последнюю очередь, поскольку уровень этой книги от высокого до over-высокого.

    И еще интересно , часто ли они используются на практике и в каких задачах ?
    Очень часто... Во всех классах, которые содержат в качестве переменных указатели.
    Last edited by root; 08-04-2013 at 11:12.
    Успех – это путь от провала до провала без потери энтузиазма. (В. Черчиль)

    Не бойся идти медленно, бойся остановиться. (Китайская пословица)

    When you lose fun and start doing things only for the payback, you're dead. (c) TCLH (Phrack 65, Intro)

  3. 3 пользователя(ей) сказали cпасибо:
    Dark Koder (07-12-2014) dukeBarman (07-02-2015) ximera (06-02-2015)
  4. #3
    ARCHANGEL's Avatar

    Default Re: Помогите понять копирующий конструктор .

    А я по поводу Страуструпа мнение не разделяю. Как по мне, так это - лучшая книга по С++, в которой есть если не всё, то почти всё о С++. Страуструп, стоит заметить, наваял множество книг, но мне особо нравится "Язык программирования С++. Специальное издание" 2010 года. По поводу копирующего конструктора - используются они очень часто, я бы сказал - невероятно часто. Говоря простоыми словами, если в коде у вас встречается объявление переменной-экземпляра некоторого класса с последующей инициализацией этой переменной, то это - применение конструктора копирования. Т.е. допустим, у вас был класс Human:

    class Human{
    private:
    int Age;
    std::string Name;
    bool armed;

    public:
    Human(){}

    };

    А потом вы написали такой код:

    Human m1 = m2;

    где объявили переменную m1 как экземпляр класса Human и сразу присвоили ей некоторое значение, то здесь будет вызываться конструктор копирования. Т.к. он не определён явно, то в данном случае вызовется конструктор копирования по умолчанию.

  5. 2 пользователя(ей) сказали cпасибо:
    Dark Koder (07-12-2014) ximera (06-02-2015)
  6. #4

    Default Re: Помогите понять копирующий конструктор .

    Спасибствую , Либерти посмотрю , хотя врядли стану покупать на Озоне .
    Философия тру . Чувствуется что автор понимает . Я не говорил что совсем чайник . На C вполне могу шлепать формы . И они даже компилятся .
    Страуструпа читал давно и это был плохой Страуструп . Он обожал лирические отступления , posix и абстрактные примеры про шарообразных коней в вакууме . Вероятно это было какое-то старое издание . С тех пор ему недоверяю .

  7. Пользователь сказал cпасибо:
    ximera (06-02-2015)
  8. #5
    root's Avatar

    Default Re: Помогите понять копирующий конструктор .

    Спасибствую, Либерти посмотрю, хотя врядли стану покупать на Озоне.
    Озон был дан как пример, я других нормальных магазинов не знаю.

    Чувствуется что автор понимает
    Важно не только понимание, но то как происходит подача информации.

    Страуструпа читал давно и это был плохой Страуструп . Он обожал лирические отступления , posix и абстрактные примеры про шарообразных коней в вакууме . Вероятно это было какое-то старое издание . С тех пор ему недоверяю .
    Я имел ввиду "Язык программирования С++".

    А я по поводу Страуструпа мнение не разделяю. Как по мне, так это - лучшая книга по С++, в которой есть если не всё, то почти всё о С++.
    Я и не спорю и нигде этого не отрицал, НО как сказал выше, для начального чтения, читай знакомства с языком - я бы её крайне не рекомендовал. Книга рассчитана на людей уже хорошо знакомых с синтаксисом языка. Если человек не имеет "базы", читать эту книгу, в лучшем случае будет тяжело и человек мало чего поймет, в худшем через пару сотен страниц она полетит в мусорку и человек возненавидит С++. Книга "Язык программирования С++" - это не учебник по C++, это книга про то, как его лучше использовать. ИМХО
    Успех – это путь от провала до провала без потери энтузиазма. (В. Черчиль)

    Не бойся идти медленно, бойся остановиться. (Китайская пословица)

    When you lose fun and start doing things only for the payback, you're dead. (c) TCLH (Phrack 65, Intro)

  9. 2 пользователя(ей) сказали cпасибо:
    Dark Koder (07-12-2014) ximera (06-02-2015)
  10. #6
    ximera's Avatar

    Default Re: Помогите понять копирующий конструктор .

    Вполне соглашусь что Страуструп хорош когда ты уже познал основы. Д.Либерти намного доступнее излагает материал, сам с нее начинал.
    Чтобы избегать ошибок, надо набираться опыта; чтобы набираться опыта, надо делать ошибки. © Лоренс Питер

    Неизбежное прими достойно. © Сенека Луций Анней

    Господи... храни сумасшедших. © Сумасшедший Фрэнки

  11. #7
    Darwin's Avatar

    Default Re: Помогите понять копирующий конструктор .

    Дополню для полноты:
    Code: C/C++
    Human src;

    Human m1(src); // вызывается конструктор копий
    Human m2 = src; // вызывается конструктор копий

    Human getMan(Human src /* вызывается конструктор копий */)
    {
    return src /* вызывается конструктор копий, создается безымянный объект */;
    }

    Human m3;
    m3 = src; // вызывается operator=
    Last edited by Darwin; 06-12-2014 at 11:23.

  12. Пользователь сказал cпасибо:
    ximera (06-02-2015)
  13. #8

    Default Re: Помогите понять копирующий конструктор .

    часто ли они используются на практике и в каких задачах ?
    Копирующий конструктор нужен, когда есть необходимость замены конструктора по умолчанию.
    Например:
    class CFoo
    {
    private:
    void * lpParam;
    }

    Тут копирующий конструктор нужен, чтобы значение переменой не потерялось, выделить память, и скопировать содержимое.

  14. Пользователь сказал cпасибо:
    ximera (06-02-2015)
  15. #9
    dukeBarman's Avatar

    Default Re: Помогите понять копирующий конструктор .

    Раз уж подняли тему про С++, то советую соответствующий курс на Stepic.org. Сертификат уже не получить, но вроде как видео стали доступны всем
    A hacker without a cat is not a hacker!

+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 01:33
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org