Ошибка "cannot instantiate abstract class". Предложение разработчикам: указывать, какие функции не реализованы. Можно ли так сделать ?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Georgiy Merts
9189
Georgiy Merts  

Всех приветствую, такой вопрос всем, кто использует ООП и чисто виртуальные функции. Чувствую, что таких тут немного, но все же...

Есть некий виртуальный интерфейс - класс, с набором чисто виртуальных функций (равных нулю).

От него наследуется реальный класс, где часть этих функций имплементировано, и добавлены свои чисто виртуальные. От этого класса - наследуется еще один класс, где имплементируется еще часть функций, и опять могут быть добавлены чисто виртуальные. В итоге мы имеем иерархию классов, в которой самый последний - имеет все виртуальные функции уже реализованными.


Но, как правило, реализация интерфейса происходит не последовательно, и нередко можно часть из функций забыть реализовать. В этом случае компилятор совершенно справедливо пишет ошибку : "cannot instantiate abstract class". 

Хорошо бы, чтобы компилятор указывал хотя бы одну нереализованную чистую виртуальную функцию. Поскольку, если иерархия классов достаточно обширна, приходится очень долго выяснить, какие функции оказались нереализованы.

Alexey Volchanskiy
27275
Alexey Volchanskiy  
George Merts:

Всех приветствую, такой вопрос всем, кто использует ООП и чисто виртуальные функции. Чувствую, что таких тут немного, но все же...

Есть некий виртуальный интерфейс - класс, с набором чисто виртуальных функций (равных нулю).

От него наследуется реальный класс, где часть этих функций имплементировано, и добавлены свои чисто виртуальные. От этого класса - наследуется еще один класс, где имплементируется еще часть функций, и опять могут быть добавлены чисто виртуальные. В итоге мы имеем иерархию классов, в которой самый последний - имеет все виртуальные функции уже реализованными.


Но, как правило, реализация интерфейса происходит не последовательно, и нередко можно часть из функций забыть реализовать. В этом случае компилятор совершенно справедливо пишет ошибку : "cannot instantiate abstract class". 

Хорошо бы, чтобы компилятор указывал хотя бы одну нереализованную чистую виртуальную функцию. Поскольку, если иерархия классов достаточно обширна, приходится очень долго выяснить, какие функции оказались нереализованы.

Жорж, ну уж от вас-то ожидаем кода, а не эмоций))) 
Georgiy Merts
9189
Georgiy Merts  

Не, Алексей, ну я-то в принципе сам виноват, что забыл все функции, которые надо реализовать в классе-потомке. Но, хорошо, чтобы компилятор мне не просто говорил "у тебя есть нереализованные функции", а указал бы - мол, вот эта функция нереализована, осталась чисто виртуальной. И эта... давай на "ты"...


А код... Ну, если народу интересно - могу, конечно, привести, но пример будет искусственный, поскольку мой реальный код - гораздо объемистее, и никто в этих иерархиях наследования разбираться не будет.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий