Как реализовать Iclonable, не приглашая будущего настройки объектовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как реализовать Iclonable, не приглашая будущего настройки объектов

Сообщение Anonymous »

Мой вопрос о том, как реализовать классический интерфейс 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»