Например,
class A {
public:
virtual void foo() = 0;
};
class B {
public:
A* a;
};
Как написать конструктор копирования для B, чтобы каждый класс B владем своим экземпляром наследника A? Ведь мы не знаем, что будет наследоваться от A...
Здравствуйте, whirlwind_t, Вы писали:
_>Например,
_>_>class A {
_>public:
_> virtual void foo() = 0;
_>};
_>class B {
_>public:
_> A* a;
_>};
_>
_>Как написать конструктор копирования для B, чтобы каждый класс B владем своим экземпляром наследника A? Ведь мы не знаем, что будет наследоваться от A...
Либо:
class B {
public:
boost::shared_ptr<A> a;
};
либо
B::B( const B& b)
{
a=b.a->Clone();
}
В зависимости от того какое копирование больше подходит
Здравствуйте, whirlwind_t, Вы писали:
_>Например,
_>_>class A {
_>public:
_> virtual void foo() = 0;
_>};
_>class B {
_>public:
_> A* a;
_>};
_>
_>Как написать конструктор копирования для B, чтобы каждый класс B владем своим экземпляром наследника A? Ведь мы не знаем, что будет наследоваться от A...
сделать в A метод A* clone() и вызывать его из нужного тебе конструктора
Здравствуйте, whirlwind_t, Вы писали:
_>Например,
_>_>class A {
_>public:
_> virtual void foo() = 0;
_>};
_>class B {
_>public:
_> A* a;
_>};
_>
_>Как написать конструктор копирования для B, чтобы каждый класс B владем своим экземпляром наследника A? Ведь мы не знаем, что будет наследоваться от A...
Через "виртуальный конструктор"...
struct A
{
virtual foo() = 0;
virtual A* clone() const = 0;
};
class B
{
A *a;
public:
...
B( const B& b ) : a(b.a->clone()) {}
...
};
Здравствуйте, Viper_Craft, Вы писали:
V_C>Здравствуйте, whirlwind_t, Вы писали:
_>>Например,
_>>_>>class A {
_>>public:
_>> virtual void foo() = 0;
_>>};
_>>class B {
_>>public:
_>> A* a;
_>>};
_>>
_>>Как написать конструктор копирования для B, чтобы каждый класс B владем своим экземпляром наследника A? Ведь мы не знаем, что будет наследоваться от A...
V_C>Через "виртуальный конструктор"...
V_C>struct A
V_C>{
V_C> virtual foo() = 0;
V_C> virtual A* clone() const = 0;
V_C>};
V_C>class B
V_C>{
V_C>A *a;
V_C>public:
V_C>...
V_C>B( const B& b ) : a(b.a->clone()) {}
V_C>...
V_C>};
Понял, спасибо. как-то я сам не догадался?