Ваш void bar()=0;
недействителен - нотацию =0
можно использовать только с виртуальными функциями.
Весь смысл абстрактного класса в том, что он абстрактный - вы определили интерфейсно не реализация.Без реализации создание экземпляра класса не приведет к значимому или полезному результату.Если имеет смысл иметь смысл создавать объекты этого класса, то вы просто не хотите использовать абстрактный класс.
Например, рассмотрите драйверы устройств.У нас может быть драйвер для абстрактного устройства хранения.Мы определяем некоторые возможности для этого устройства, такие как чтение и запись данных.Этот абстрактный класс дает любому коду, который хочет читать / записывать данные, возможность работать с конкретным классом, производным от этого абстрактного класса.
Мы не можем просто создать экземпляр нашего абстрактного устройства хранения.Вместо этого нам нужен конкретный объект, такой как флэш-накопитель, дисковод и т. Д., Для чтения / записи.Конкретный класс необходим, потому что нам нужен код, специфичный для реального устройства, для выполнения команд, которые мы определили в нашей абстрактной базе.У нашего абстрактного класса хранения только чтение или запись, но do чтение или запись, нам нужен драйвер для конкретного устройства.Кто-то знает, как разговаривать с жестким диском SATA, а кто-то знает, как разговаривать с флэш-накопителем USB, а третий знает, как читать с SD-карты или записывать на нее.Мы не можем , однако, просто скажем «Я собираюсь создать абстрактное устройство хранения» и поговорим с ним, не определяя фактический код, который будет переводить команду «записи» в (например)правильные сигналы, передаваемые через SATA, USB, Firewire и т. д., для передачи данных на реальный диск.
Таким образом, попытка создания экземпляра нашего абстрактного класса не имеет смысла и не допускается.Мы просто используем абстрактный базовый класс, чтобы остальная часть системы могла работать со всеми устройствами одинаково.Остальной части кода не волнует, как сигналы отличаются друг от друга - он просто видит группу дисков и может работать со всеми из них, даже если детали чтения данных через USB полностью отличаются от чтениячерез Firewire (например).