Вообще говоря, абстрактный класс используются для определения интерфейсу и/или частичной реализации и предназначен для наследуются конкретными классами. Это способ обеспечить соответствие contract между классом дизайнеров и пользователей этого класса, независимо от того, что они.
Если вам не нужен этот контракт и вы хотите создать экземпляр, не применяйте его к абстрактному классу, то есть удалите = 0
.
Если ваша проблема почему бы чисто виртуальные функции имеют тело, в первую очередь, то один хороший пример может быть эта цитата из Эффективное C++ книги Скотт Мейерс:
Производные классы, которые реализуют этот чистая виртуальная функция может вызывать эту реализацию где-то в своем коде. Если часть кода имеет два разных производных класса, то имеет смысл переместить в иерархию, даже если функция должна быть чистой виртуальной.
Другим примером является чисто виртуальный деструктор (который также является функцией, кстати):
...
virtual ~foo() = 0;
...
foo::~foo() {} // required!
когда вы требуется обеспечить выполнение для него, но в то же время хотите сделать он чисто виртуальный, чтобы сделать абстрактное класс foo
. Таким образом, на самом деле ядро самого языка полагается на эту функцию.
[C40 угловой корпус: вы можете реализовать чистые виртуальные функции в базовом классе] (http://blogs.msdn.com/b/oldnewthing/archive/2013/10/11/10455907.aspx) – GSerg
Я знаю, что удалить = 0 позволит мне создать объект. Но я думаю, это не вопрос, который я задал. Я хотел знать, почему мы не можем создать объект абстрактного класса? –
@DeveshAgrawal '= 0' является объявлением компилятору, что вы не сможете создать экземпляр класса до тех пор, пока вы не переопределите этот метод, совершенно независимо от того, действительно ли этот метод реализован или нет. –