Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > не могу разобраться, помогите понять как сделать


Автор: varnie 23.7.2008, 01:11
привет всем.
есть такие классы:
Код

class Base{
public:
    //...
    virtual ~Base(){}
};

class Derived : public Base{
   bool _b;
public:
  //...
  Derived(bool b):_b(b){}
  Derived operator !() const{
      //...
      return Derived(!_b);
  }
};

typedef boost::shared_ptr<Base> objPtr;

class Data{
  objPtr o;
public:
  //...
  objPtr getObject() const{
    return o;
  }
};

теперь есть ф-ция:
Код

objPtr foo(Data &data){

   objPtr obj = data->getObject();
   //далее нужно каким-то образом возвратить из ф-ции objPtr, который бы содержал указатель на объект с исполненной operator !() на нём. т.е. инвертированным объектом. 
}

как это разрулить?

Автор: vinter 23.7.2008, 07:26
return obj;

Автор: varnie 23.7.2008, 10:23
Цитата(vinter @ 23.7.2008,  10:26)
return obj;

а как же:
Цитата

 //далее нужно каким-то образом возвратить из ф-ции objPtr, который бы содержал указатель на объект с исполненной operator !() на нём. т.е. инвертированным объектом. 

??
мне сначала нужно разыменовать objPtr, применить к нему operator !(), сохранить, и уже ПОТОМ возвратить  cмарт-пойнтер, содержащий этот объект. как это сделать?

Автор: vinter 23.7.2008, 11:06
Код

objPtr foo(Data &data){
   objPtr obj = data->getObject();
   return (*obj = !*obj);
   //далее нужно каким-то образом возвратить из ф-ции objPtr, который бы содержал указатель на объект с исполненной operator !() на нём. т.е. инвертированным объектом. 
}

Автор: xvr 23.7.2008, 11:16
Оператор '!' не удасться применить к Base объекту, так как он там не определен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)