всем hi!
я что то запутался в:
class C1 {};
class C2 : public C1 {};
C1 * GetNew (const C1 * pntC) {
//тут нужно создать объект класса C1 или C2 и вернуть из функции
//под создать подразумеваю "создать копию того объекта, который пришел в параметре"
}
т.е. я даже не представляю как подойти к решению, помогите чем сможете
class C1
{
public:
virtual ~C1() {}
virtual C1* clone() const
{
return new C1(*this);
}
};
class C2 : public C1
{
public:
virtual C1* clone() const
{
return new C2(*this);
}
};
inline C1* clone(const C1 *ptr)
{
return ptr->clone();
}
int main()
{
C1* c1 = new C1;
C2* c2 = new C2;
C1* clone1 = clone(c1);
C1* clone2 = clone(c2);
delete clone1;
delete clone2;
delete c1;
delete c2;
return 0;
}
> > class C1 {};
> class C2 : public C1 {};
>
> C1 * GetNew (const C1 * pntC) {
> //тут нужно создать объект класса C1 или C2 и вернуть из функции
> //под создать подразумеваю "создать копию того объекта, который пришел в параметре"
> }
>
>
> т.е. я даже не представляю как подойти к решению, помогите чем сможете
Определи и реализуй каноническую ф-цию-член clone (prototype pattern). Можешь также сделать поиск по форуму по слову clone.
--
Maxim Egorushkin
MetaCommunications Engineering
http://www.meta-comm.com/engineering/Posted via RSDN NNTP Server 1.8 beta
Здравствуйте, Анатолий Широков, Вы писали:
Мож тогда лучше так?
АШ>АШ>class C2 : public C1
АШ>{
АШ>public:
АШ> virtual C2* clone() const
АШ> {
АШ> return new C2(*this);
АШ> }
АШ>};
АШ>
Надо ведь уважать людей, которые добились введения ковариантных типов возвращаемых значений
B>Надо ведь уважать людей, которые добились введения ковариантных типов возвращаемых значений
Да я не против. Причем это закреплено стандартом. Только, что делать с компиляторами, которые этого не понимают? Условную компиляцию?
class C2 : public C1
{
public:
#ifndef COVARIANT_IS_NOT_SUPPORTED
virtual C2* clone() const
#else
virtual C1* clone() const
#endif
{
return new C2(*this);
}
};
Но вряд ли вышколенные примеры, изобилующие деталями, прольют свет на идеи, которые интересовали Анонима, ИМХО
.