Объявление об объявлении ~CharArray
внутри класса с именем ConcreteCharArray
является просто незаконным, что компилятор вам сообщает. Присутствие ~
показало, что вы объявляете деструктор, а имя деструктора должно совпадать с именем класса.
Деструкторы специальные функции-члены. Одним из их специальных свойств является то, что для того, чтобы переопределить виртуальный деструктор базового класса, вам не нужно сопоставлять имя этого деструктора в производном классе (как обычно вы делаете с обычными функциями-членами). Компилятор автоматически сопоставляет деструкторы друг с другом, даже если их имена разные. Это легко сделать, поскольку каждый класс имеет один и только один деструктор.
Итак, если вы хотите объявить деструктор в классе ConcreteCharArray
, вы должны позвонить этому деструктору ~ConcreteCharArray
. Других вариантов нет. Несмотря на то, что имя производного деструктора отличается от имени базового деструктора, производный деструктор будет рассматриваться как виртуальный и переопределит базовый.
переименовать в ~ ConcreteCharArray –
Дедуктор должен быть тем же именем, что и класс, поэтому '~ CharArray' должен быть' ~ ConcreteCharArray'. –