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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> operator = 
:(
    Опции темы
zss
Дата 16.1.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть следующий код
Код

class Base
{
private :
    int m_value;
public :
    explicit Base (int value) : m_value (value) {;}
    virtual ~Base () = 0 {;}
}

class S
{
private :
    S (const S&);
    S& operator = (const S&);

    boost::weak_ptr<Some> m_some;
public :
    explicit S (const boost::shared_ptr<Some> some) : m_some(some) {;}
}

class Some : public Base
{
private :
    int m_data;
    void swap (const Some&rhs)
    {
         std::swap (m_data, rhs.m_data);
    }
public :
    S s;

    explicit Some (int value, int data = 0) : Base (value), m_data (data), s (shared_from_this()) {;}
    Some (const Some& rhs) : Base (rhs), m_data (rhs.m_data), s (shared_from_this()) {;}
    Some& operator = (const Some& rhs)
    {
        if (this != &rhs)
        {
            Some temp (rhs);
            swap (temp);
        }
        return *this;
    }
}


как реализовать метод swap для базового сласса и вложенного класса S.
Или для них тоже нужно определять оператор = и копирующий конструктор
PM MAIL ICQ   Вверх
Rockie
Дата 16.1.2007, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



У тебя нет конструктора по умолчанию для S, и в то же время
Код

   S s;
. 
Возможно то что ты хочешь сделать решается как-то по-другому.




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
zss
Дата 16.1.2007, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Rockie @  16.1.2007,  10:50 Найти цитируемый пост)
У тебя нет конструктора по умолчанию для S, и в то же время
Выделить всёкод C++
  1:
     S s;
. 
Возможно то что ты хочешь сделать решается как-то по-другому.


я S инициализирую в конструкторе Some
PM MAIL ICQ   Вверх
maxim1000
Дата 16.1.2007, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

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



ну вот, например, для базового класса:
Код

class Base
{
private :
    int m_value;
public :
    explicit Base (int value) : m_value (value) {;}
    virtual ~Base () = 0 {;}

    void swap(Base &obj)
    {
        std::swap(m_value,obj.m_value);
    }
}


Добавлено @ 13:38 
и для пары значений:
Код

template<> inline void swap<Base>(Base &a,Base &b)
{
    a.swap(b);
}



--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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