Мой вопрос о том, как реализовать классический интерфейс Iclonable таким образом, что он не приведет к непреднамеренному сцеплению объектов, когда будущий программист не обращает пристального внимания. Вот пример типа ошибки программирования, который я хотел бы обнаружить (предпочтительно во время компиляции): < /p>
Код: Выделить всё
#include
class ICloneable
{
public:
virtual ICloneable * clone() const = 0;
};
class A : public ICloneable
{
public:
A() {}
A(const A & rhs) {}
virtual ICloneable * clone() const {return new A(*this);}
};
class B : public A
{
public:
B() {}
B(const B & rhs) {}
// Problem, B's programmer forget to add a clone() method here!
};
int main(int, char**)
{
B b;
ICloneable * clone = b.clone(); // d'oh! (clone) points to an A, not a B!
return 0;
}
Есть ли в C ++ какое-либо способ убедить компилятор издать ошибку, если B (или какие-либо дополнительные неабстроктные подклассы B ) не определяет свой собственный клон () ? За исключением этого, есть ли автоматический способ обнаружить эту ошибку во время выполнения?
Подробнее здесь:
https://stackoverflow.com/questions/574 ... ct-slicing